Files
gitrusprusandCursor 2c16bc0b56 Add CA admin UI and extend admin API for the unified platform.
Deliver parsers, events, analytics, and PI management in Vue; fix Telegram session mount and map navigation to events by eventId.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-30 14:40:59 +03:00

43 lines
1.2 KiB
Python

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())