Mecanismo sort para tablas
This commit is contained in:
@@ -36,6 +36,8 @@ class ClassService:
|
||||
skip: int = 0,
|
||||
limit: int = 100,
|
||||
filters: Optional[Dict[str, Any]] = None,
|
||||
sort_by: Optional[str] = None,
|
||||
sort_order: Optional[str] = "asc",
|
||||
) -> tuple[List[Class], int]:
|
||||
"""
|
||||
Get all classes for a tenant with pagination and filters
|
||||
@@ -68,6 +70,18 @@ class ClassService:
|
||||
query = query.filter(
|
||||
Class.physical_review == filters["physical_review"]
|
||||
)
|
||||
|
||||
# Apply sorting
|
||||
if sort_by:
|
||||
column = getattr(Class, sort_by, None)
|
||||
if column:
|
||||
if sort_order == "desc":
|
||||
query = query.order_by(column.desc())
|
||||
else:
|
||||
query = query.order_by(column.asc())
|
||||
else:
|
||||
# Default sorting
|
||||
query = query.order_by(Class.class_code.asc())
|
||||
|
||||
total = query.count()
|
||||
items = query.offset(skip).limit(limit).all()
|
||||
@@ -82,6 +96,8 @@ class ClassService:
|
||||
skip: int = 0,
|
||||
limit: int = 1000,
|
||||
filters: Optional[Dict[str, Any]] = None,
|
||||
sort_by: Optional[str] = None,
|
||||
sort_order: Optional[str] = "asc",
|
||||
) -> tuple[List[Dict[str, Any]], int]:
|
||||
"""
|
||||
Get all classes with their FA data in a single query using LEFT JOIN.
|
||||
@@ -125,6 +141,23 @@ class ClassService:
|
||||
if filters.get("fraction"):
|
||||
query = query.filter(Class.fraction.ilike(f"%{filters['fraction']}%"))
|
||||
|
||||
# Apply sorting
|
||||
if sort_by:
|
||||
# Check if sort_by belongs to Class or QClasses
|
||||
column = getattr(Class, sort_by, None)
|
||||
if column:
|
||||
if sort_order == "desc":
|
||||
query = query.order_by(column.desc())
|
||||
else:
|
||||
query = query.order_by(column.asc())
|
||||
else:
|
||||
# Handle FA extension fields if sort_by is one of them
|
||||
# (Simple approach for now, assuming base class fields are prioritized)
|
||||
pass
|
||||
else:
|
||||
# Default sorting
|
||||
query = query.order_by(Class.class_code.asc())
|
||||
|
||||
# Count total before pagination
|
||||
total = query.count()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user