Mecanismo sort para tablas

This commit is contained in:
2026-03-27 08:45:51 -05:00
parent d35f02563a
commit d93c4c6b7b
39 changed files with 1724 additions and 1237 deletions

View File

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