feat: all data get pagination

main
MrWaradana 12 months ago
parent 916c58f4fc
commit 1da2d1d41b

@ -25,6 +25,7 @@ def common_parameters(
filter_spec: QueryStr = Query(None, alias="filter"), # type: ignore
sort_by: List[str] = Query([], alias="sortBy[]"),
descending: List[bool] = Query([], alias="descending[]"),
all: int = Query(0),
# role: QueryStr = Depends(get_current_role),
):
return {
@ -37,11 +38,12 @@ def common_parameters(
"descending": descending,
"current_user": current_user,
# "role": role,
"all": bool(all),
}
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),
]
@ -85,6 +87,7 @@ async def search_filter_sort_paginate(
sort_by: List[str] = None,
descending: List[bool] = None,
current_user: str = None,
all: bool = False,
):
"""Common functionality for searching, filtering, sorting, and pagination."""
# try:
@ -101,6 +104,16 @@ async def search_filter_sort_paginate(
# Get total count
count_query = Select(func.count()).select_from(query.subquery())
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)

@ -77,7 +77,6 @@ async def get_all(
)
common["items_per_page"] = items_per_page
result = await search_filter_sort_paginate(model=query, **common)
return result

Loading…
Cancel
Save