|
|
|
@ -25,6 +25,7 @@ def common_parameters(
|
|
|
|
filter_spec: QueryStr = Query(None, alias="filter"), # type: ignore
|
|
|
|
filter_spec: QueryStr = Query(None, alias="filter"), # type: ignore
|
|
|
|
sort_by: List[str] = Query([], alias="sortBy[]"),
|
|
|
|
sort_by: List[str] = Query([], alias="sortBy[]"),
|
|
|
|
descending: List[bool] = Query([], alias="descending[]"),
|
|
|
|
descending: List[bool] = Query([], alias="descending[]"),
|
|
|
|
|
|
|
|
all: int = Query(0),
|
|
|
|
# role: QueryStr = Depends(get_current_role),
|
|
|
|
# role: QueryStr = Depends(get_current_role),
|
|
|
|
):
|
|
|
|
):
|
|
|
|
return {
|
|
|
|
return {
|
|
|
|
@ -37,11 +38,12 @@ def common_parameters(
|
|
|
|
"descending": descending,
|
|
|
|
"descending": descending,
|
|
|
|
"current_user": current_user,
|
|
|
|
"current_user": current_user,
|
|
|
|
# "role": role,
|
|
|
|
# "role": role,
|
|
|
|
|
|
|
|
"all": bool(all),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CommonParameters = Annotated[
|
|
|
|
CommonParameters = Annotated[
|
|
|
|
dict[str, int | str | DbSession | QueryStr | Json | List[str] | List[bool]],
|
|
|
|
dict[str, int | str | DbSession | QueryStr | Json | List[str] | List[bool] | bool],
|
|
|
|
Depends(common_parameters),
|
|
|
|
Depends(common_parameters),
|
|
|
|
]
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
|
|
@ -85,6 +87,7 @@ async def search_filter_sort_paginate(
|
|
|
|
sort_by: List[str] = None,
|
|
|
|
sort_by: List[str] = None,
|
|
|
|
descending: List[bool] = None,
|
|
|
|
descending: List[bool] = None,
|
|
|
|
current_user: str = None,
|
|
|
|
current_user: str = None,
|
|
|
|
|
|
|
|
all: bool = False,
|
|
|
|
):
|
|
|
|
):
|
|
|
|
"""Common functionality for searching, filtering, sorting, and pagination."""
|
|
|
|
"""Common functionality for searching, filtering, sorting, and pagination."""
|
|
|
|
# try:
|
|
|
|
# try:
|
|
|
|
@ -101,6 +104,16 @@ async def search_filter_sort_paginate(
|
|
|
|
# Get total count
|
|
|
|
# Get total count
|
|
|
|
count_query = Select(func.count()).select_from(query.subquery())
|
|
|
|
count_query = Select(func.count()).select_from(query.subquery())
|
|
|
|
total = await db_session.scalar(count_query)
|
|
|
|
total = await db_session.scalar(count_query)
|
|
|
|
|
|
|
|
if all:
|
|
|
|
|
|
|
|
result = await db_session.execute(query)
|
|
|
|
|
|
|
|
items = result.scalars().all()
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
|
|
|
"items": items,
|
|
|
|
|
|
|
|
"itemsPerPage": total,
|
|
|
|
|
|
|
|
"totalPages": 1,
|
|
|
|
|
|
|
|
"page": 1,
|
|
|
|
|
|
|
|
"total": total,
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
query = query.offset((page - 1) * items_per_page).limit(items_per_page)
|
|
|
|
query = query.offset((page - 1) * items_per_page).limit(items_per_page)
|
|
|
|
|
|
|
|
|
|
|
|
|