from datetime import datetime from sqlalchemy.orm import Query, Session from ..models import Event def build_events_query( db: Session, *, source_type: str | None = None, region: str | None = None, topic: str | None = None, locality: str | None = None, date_from: datetime | None = None, date_to: datetime | None = None, search: str | None = None, ) -> Query: query = db.query(Event) if source_type: query = query.filter(Event.source_type == source_type) if region: query = query.filter(Event.region == region) if topic: query = query.filter(Event.topic == topic) if locality: query = query.filter(Event.locality.ilike(f"%{locality}%")) if date_from: query = query.filter(Event.event_date >= date_from) if date_to: query = query.filter(Event.event_date <= date_to) if search: pattern = f"%{search}%" query = query.filter( Event.title.ilike(pattern) | Event.description.ilike(pattern) | Event.raw_text.ilike(pattern) | Event.locality.ilike(pattern) ) return query.order_by(Event.ingested_at.desc())