mirror of
https://github.com/TronoSfera/Law.git
synced 2026-05-18 10:03:45 +03:00
29 lines
972 B
Python
29 lines
972 B
Python
from sqlalchemy.orm import Query
|
|
from sqlalchemy import asc, desc
|
|
from app.schemas.universal import UniversalQuery
|
|
|
|
def apply_universal_query(q: Query, model, uq: UniversalQuery) -> Query:
|
|
for f in uq.filters:
|
|
col = getattr(model, f.field, None)
|
|
if col is None:
|
|
continue
|
|
if f.op == "=":
|
|
q = q.filter(col == f.value)
|
|
elif f.op == "!=":
|
|
q = q.filter(col != f.value)
|
|
elif f.op == ">":
|
|
q = q.filter(col > f.value)
|
|
elif f.op == "<":
|
|
q = q.filter(col < f.value)
|
|
elif f.op == ">=":
|
|
q = q.filter(col >= f.value)
|
|
elif f.op == "<=":
|
|
q = q.filter(col <= f.value)
|
|
elif f.op == "~":
|
|
q = q.filter(col.ilike(f"%{f.value}%"))
|
|
for s in uq.sort:
|
|
col = getattr(model, s.field, None)
|
|
if col is None:
|
|
continue
|
|
q = q.order_by(asc(col) if s.dir == "asc" else desc(col))
|
|
return q
|