feat: Add search and sorting functionality to sound repository and API
This commit is contained in:
@@ -10,7 +10,7 @@ from app.core.dependencies import get_current_active_user_flexible
|
||||
from app.models.credit_action import CreditActionType
|
||||
from app.models.sound import Sound
|
||||
from app.models.user import User
|
||||
from app.repositories.sound import SoundRepository
|
||||
from app.repositories.sound import SoundRepository, SoundSortField, SortOrder
|
||||
from app.services.credit import CreditService, InsufficientCreditsError
|
||||
from app.services.vlc_player import VLCPlayerService, get_vlc_player_service
|
||||
|
||||
@@ -42,10 +42,37 @@ async def get_sounds(
|
||||
list[str] | None,
|
||||
Query(description="Filter by sound types (e.g., SDB, TTS, EXT)"),
|
||||
] = None,
|
||||
search: Annotated[
|
||||
str | None,
|
||||
Query(description="Search sounds by name"),
|
||||
] = None,
|
||||
sort_by: Annotated[
|
||||
SoundSortField | 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,
|
||||
) -> dict[str, list[Sound]]:
|
||||
"""Get all sounds, optionally filtered by types."""
|
||||
"""Get sounds with optional search, filtering, and sorting."""
|
||||
try:
|
||||
sounds = await sound_repo.get_by_types(types)
|
||||
sounds = await sound_repo.search_and_sort(
|
||||
search_query=search,
|
||||
sound_types=types,
|
||||
sort_by=sort_by,
|
||||
sort_order=sort_order,
|
||||
limit=limit,
|
||||
offset=offset,
|
||||
)
|
||||
except Exception as e:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||
|
||||
Reference in New Issue
Block a user