feat: Implement search and sorting functionality for playlists in API and repository
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
|
||||
from typing import Annotated
|
||||
|
||||
from fastapi import APIRouter, Depends, HTTPException, status
|
||||
from fastapi import APIRouter, Depends, HTTPException, Query, status
|
||||
from sqlmodel.ext.asyncio.session import AsyncSession
|
||||
|
||||
from app.core.database import get_db
|
||||
@@ -19,6 +19,7 @@ from app.schemas.playlist import (
|
||||
PlaylistUpdateRequest,
|
||||
)
|
||||
from app.services.playlist import PlaylistService
|
||||
from app.repositories.playlist import PlaylistSortField, SortOrder
|
||||
|
||||
router = APIRouter(prefix="/playlists", tags=["playlists"])
|
||||
|
||||
@@ -34,10 +35,38 @@ async def get_playlist_service(
|
||||
async def get_all_playlists(
|
||||
current_user: Annotated[User, Depends(get_current_active_user_flexible)], # noqa: ARG001
|
||||
playlist_service: Annotated[PlaylistService, Depends(get_playlist_service)],
|
||||
) -> list[PlaylistResponse]:
|
||||
"""Get all playlists from all users."""
|
||||
playlists = await playlist_service.get_all_playlists()
|
||||
return [PlaylistResponse.from_playlist(playlist) for playlist in playlists]
|
||||
search: Annotated[
|
||||
str | None,
|
||||
Query(description="Search playlists by name"),
|
||||
] = None,
|
||||
sort_by: Annotated[
|
||||
PlaylistSortField | None,
|
||||
Query(description="Sort by field"),
|
||||
] = None,
|
||||
sort_order: Annotated[
|
||||
SortOrder,
|
||||
Query(description="Sort order (asc or desc)"),
|
||||
] = SortOrder.ASC,
|
||||
limit: Annotated[
|
||||
int | None,
|
||||
Query(description="Maximum number of results", ge=1, le=1000),
|
||||
] = None,
|
||||
offset: Annotated[
|
||||
int,
|
||||
Query(description="Number of results to skip", ge=0),
|
||||
] = 0,
|
||||
) -> list[dict]:
|
||||
"""Get all playlists from all users with search and sorting."""
|
||||
playlists = await playlist_service.search_and_sort_playlists(
|
||||
search_query=search,
|
||||
sort_by=sort_by,
|
||||
sort_order=sort_order,
|
||||
user_id=None,
|
||||
include_stats=True,
|
||||
limit=limit,
|
||||
offset=offset,
|
||||
)
|
||||
return playlists
|
||||
|
||||
|
||||
@router.get("/user")
|
||||
|
||||
Reference in New Issue
Block a user