feat: Implement pagination for extractions and playlists with total count in responses
This commit is contained in:
@@ -94,14 +94,18 @@ async def get_all_extractions(
|
||||
sort_by: Annotated[str, Query(description="Sort by field")] = "created_at",
|
||||
sort_order: Annotated[str, Query(description="Sort order (asc/desc)")] = "desc",
|
||||
status_filter: Annotated[str | None, Query(description="Filter by status")] = None,
|
||||
) -> dict[str, list[ExtractionInfo]]:
|
||||
page: Annotated[int, Query(description="Page number", ge=1)] = 1,
|
||||
limit: Annotated[int, Query(description="Items per page", ge=1, le=100)] = 50,
|
||||
) -> dict:
|
||||
"""Get all extractions with optional filtering, search, and sorting."""
|
||||
try:
|
||||
extractions = await extraction_service.get_all_extractions(
|
||||
result = await extraction_service.get_all_extractions(
|
||||
search=search,
|
||||
sort_by=sort_by,
|
||||
sort_order=sort_order,
|
||||
status_filter=status_filter,
|
||||
page=page,
|
||||
limit=limit,
|
||||
)
|
||||
|
||||
except Exception as e:
|
||||
@@ -110,9 +114,7 @@ async def get_all_extractions(
|
||||
detail=f"Failed to get extractions: {e!s}",
|
||||
) from e
|
||||
else:
|
||||
return {
|
||||
"extractions": extractions,
|
||||
}
|
||||
return result
|
||||
|
||||
|
||||
@router.get("/user")
|
||||
@@ -123,7 +125,9 @@ async def get_user_extractions(
|
||||
sort_by: Annotated[str, Query(description="Sort by field")] = "created_at",
|
||||
sort_order: Annotated[str, Query(description="Sort order (asc/desc)")] = "desc",
|
||||
status_filter: Annotated[str | None, Query(description="Filter by status")] = None,
|
||||
) -> dict[str, list[ExtractionInfo]]:
|
||||
page: Annotated[int, Query(description="Page number", ge=1)] = 1,
|
||||
limit: Annotated[int, Query(description="Items per page", ge=1, le=100)] = 50,
|
||||
) -> dict:
|
||||
"""Get all extractions for the current user."""
|
||||
try:
|
||||
if current_user.id is None:
|
||||
@@ -132,12 +136,14 @@ async def get_user_extractions(
|
||||
detail="User ID not available",
|
||||
)
|
||||
|
||||
extractions = await extraction_service.get_user_extractions(
|
||||
result = await extraction_service.get_user_extractions(
|
||||
user_id=current_user.id,
|
||||
search=search,
|
||||
sort_by=sort_by,
|
||||
sort_order=sort_order,
|
||||
status_filter=status_filter,
|
||||
page=page,
|
||||
limit=limit,
|
||||
)
|
||||
|
||||
except Exception as e:
|
||||
@@ -146,6 +152,4 @@ async def get_user_extractions(
|
||||
detail=f"Failed to get extractions: {e!s}",
|
||||
) from e
|
||||
else:
|
||||
return {
|
||||
"extractions": extractions,
|
||||
}
|
||||
return result
|
||||
|
||||
Reference in New Issue
Block a user