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

@@ -1,5 +1,6 @@
from typing import Any, Callable, Dict, Generic, Optional, Type, TypeVar, Union
import logging
import inspect
from core.database import get_core_db
from core.security import get_current_user, validate_access_to_resource
@@ -147,6 +148,8 @@ class TenantCRUDRoutes(
le=self.max_page_size,
description="Page size",
),
sort_by: Optional[str] = Query(None, description="Column to sort by"),
sort_order: Optional[str] = Query("asc", regex="^(asc|desc)$", description="Sort order (asc or desc)"),
db: Session = Depends(self.db_dependency),
current_user: Dict[str, Any] = Depends(self.auth_dependency),
):
@@ -175,15 +178,23 @@ class TenantCRUDRoutes(
# Extraer todos los parámetros de búsqueda dinámicamente
# Excluimos los parámetros estándar de paginación y control
standard_params = {"company_id", "all_companies", "page", "page_size"}
standard_params = {"company_id", "all_companies", "page", "page_size", "sort_by", "sort_order"}
filters = {
k: v
for k, v in request.query_params.items()
if k not in standard_params and v is not None and v != ""
}
# Determine what parameters the service method accepts
sig = inspect.signature(self.service.get_all)
kwargs = {}
if "sort_by" in sig.parameters:
kwargs["sort_by"] = sort_by
if "sort_order" in sig.parameters:
kwargs["sort_order"] = sort_order
items, total = self.service.get_all(
db, tenant_id, target_company_id, skip, page_size, filters
db, tenant_id, target_company_id, skip, page_size, filters, **kwargs
)
@@ -214,6 +225,8 @@ class TenantCRUDRoutes(
le=self.max_page_size,
description="Page size",
),
sort_by: Optional[str] = Query(None, description="Column to sort by"),
sort_order: Optional[str] = Query("asc", regex="^(asc|desc)$", description="Sort order (asc or desc)"),
db: Session = Depends(self.db_dependency),
current_user: Dict[str, Any] = Depends(self.auth_dependency),
):
@@ -238,8 +251,16 @@ class TenantCRUDRoutes(
skip = (page - 1) * page_size
# Determine what parameters the service method accepts
sig = inspect.signature(self.service.get_all)
kwargs = {}
if "sort_by" in sig.parameters:
kwargs["sort_by"] = sort_by
if "sort_order" in sig.parameters:
kwargs["sort_order"] = sort_order
items, total = self.service.get_all(
db, tenant_id, target_company_id, skip, page_size, None
db, tenant_id, target_company_id, skip, page_size, None, **kwargs
)
return {