Files
you-music/backend/app/schemas/schemas.py
T
2025-10-30 14:45:41 +11:00

86 lines
1.7 KiB
Python

from pydantic import BaseModel, HttpUrl
from typing import Optional
from datetime import datetime
class MusicBase(BaseModel):
title: str
artist: Optional[str] = None
album: Optional[str] = None
duration: Optional[float] = None
source_url: Optional[str] = None
source_type: Optional[str] = None
thumbnail: Optional[str] = None
lyrics: Optional[str] = None
class MusicCreate(MusicBase):
file_path: str
class MusicUpdate(BaseModel):
title: Optional[str] = None
artist: Optional[str] = None
album: Optional[str] = None
lyrics: Optional[str] = None
class Music(MusicBase):
id: int
file_path: str
file_size: Optional[int] = None
created_at: datetime
updated_at: datetime
class Config:
from_attributes = True
class PlaylistBase(BaseModel):
name: str
description: Optional[str] = None
thumbnail: Optional[str] = None
class PlaylistCreate(PlaylistBase):
pass
class PlaylistUpdate(BaseModel):
name: Optional[str] = None
description: Optional[str] = None
thumbnail: Optional[str] = None
class Playlist(PlaylistBase):
id: int
created_at: datetime
updated_at: datetime
music_items: list[Music] = []
class Config:
from_attributes = True
class SearchResult(BaseModel):
title: str
artist: Optional[str] = None
duration: Optional[int] = None
thumbnail: Optional[str] = None
url: str
source: str # youtube, bilibili
class DownloadRequest(BaseModel):
url: str
title: Optional[str] = None
add_to_playlist: Optional[str] = None
thumbnail: Optional[str] = None
artist: Optional[str] = None
class ShareLink(BaseModel):
music_id: int
token: str
url: str