refactor: Organize and implement player and playlist schemas

This commit is contained in:
JSC
2025-07-31 10:23:46 +02:00
parent 3feff2e0f1
commit dc372b961e
5 changed files with 190 additions and 124 deletions

View File

@@ -3,36 +3,18 @@
from typing import Annotated, Any
from fastapi import APIRouter, Depends, HTTPException, status
from pydantic import BaseModel, Field
from app.core.dependencies import get_current_active_user_flexible
from app.core.logging import get_logger
from app.models.user import User
from app.services.player import PlayerMode, get_player_service
from app.schemas.player import PlayerModeRequest, PlayerSeekRequest, PlayerVolumeRequest
from app.services.player import get_player_service
logger = get_logger(__name__)
router = APIRouter(prefix="/player", tags=["player"])
class SeekRequest(BaseModel):
"""Request model for seek operation."""
position_ms: int = Field(ge=0, description="Position in milliseconds")
class VolumeRequest(BaseModel):
"""Request model for volume control."""
volume: int = Field(ge=0, le=100, description="Volume level (0-100)")
class ModeRequest(BaseModel):
"""Request model for mode change."""
mode: PlayerMode = Field(description="Playback mode")
@router.post("/play")
async def play(
current_user: Annotated[User, Depends(get_current_active_user_flexible)], # noqa: ARG001
@@ -143,7 +125,7 @@ async def previous_track(
@router.post("/seek")
async def seek(
request: SeekRequest,
request: PlayerSeekRequest,
current_user: Annotated[User, Depends(get_current_active_user_flexible)], # noqa: ARG001
) -> dict[str, str]:
"""Seek to specific position in current track."""
@@ -161,7 +143,7 @@ async def seek(
@router.post("/volume")
async def set_volume(
request: VolumeRequest,
request: PlayerVolumeRequest,
current_user: Annotated[User, Depends(get_current_active_user_flexible)], # noqa: ARG001
) -> dict[str, str]:
"""Set playback volume."""
@@ -179,7 +161,7 @@ async def set_volume(
@router.post("/mode")
async def set_mode(
request: ModeRequest,
request: PlayerModeRequest,
current_user: Annotated[User, Depends(get_current_active_user_flexible)], # noqa: ARG001
) -> dict[str, str]:
"""Set playback mode."""