feat: deals filters

This commit is contained in:
2025-09-01 17:54:45 +04:00
parent 93141da22c
commit 57c3ada2fa
8 changed files with 90 additions and 14 deletions

21
utils/sorting.py Normal file
View File

@ -0,0 +1,21 @@
from typing import Optional
from fastapi import Query
from sqlalchemy import Select
from schemas.base import SortingSchema, SortDir
from utils.strings import camel_to_snake
async def sorting_parameters(
field: Optional[str] = Query(default=None, alias="sortingField"),
direction: Optional[SortDir] = Query(default=None, alias="sortingDirection"),
) -> SortingSchema:
return SortingSchema(field=camel_to_snake(field), direction=direction)
def apply_sorting(stmt: Select, cls: type, field: str, direction: SortDir) -> Select:
attr = getattr(cls, field)
if direction == "asc":
return stmt.order_by(attr.asc())
return stmt.order_by(attr.desc())

8
utils/strings.py Normal file
View File

@ -0,0 +1,8 @@
import re
from typing import Optional
def camel_to_snake(string: Optional[str]) -> str:
if not string:
return string
return re.sub(r"(?<!^)(?=[A-Z])", "_", string).lower()