This commit is contained in:
2025-12-12 13:30:09 +03:00
commit 2f1e1f35e3
75 changed files with 4603 additions and 0 deletions

View File

View File

@@ -0,0 +1,19 @@
from pydantic import BaseModel
from uuid import UUID
from datetime import datetime
class MessageCreate(BaseModel):
text: str
class MessageResponse(BaseModel):
id: UUID
room_id: UUID
user_id: UUID
username: str
text: str
created_at: datetime
class Config:
from_attributes = True

View File

@@ -0,0 +1,47 @@
from pydantic import BaseModel
from uuid import UUID
from datetime import datetime
from typing import Optional
from .user import UserResponse
from .track import TrackResponse
class RoomCreate(BaseModel):
name: str
class RoomResponse(BaseModel):
id: UUID
name: str
owner_id: UUID
current_track_id: Optional[UUID] = None
playback_position: int
is_playing: bool
created_at: datetime
participants_count: int = 0
class Config:
from_attributes = True
class RoomDetailResponse(BaseModel):
id: UUID
name: str
owner: UserResponse
current_track: Optional[TrackResponse] = None
playback_position: int
is_playing: bool
created_at: datetime
participants: list[UserResponse] = []
class Config:
from_attributes = True
class PlayerAction(BaseModel):
action: str # play, pause, seek, next, prev
position: Optional[int] = None # for seek
class QueueAdd(BaseModel):
track_id: UUID

View File

@@ -0,0 +1,25 @@
from pydantic import BaseModel
from uuid import UUID
from datetime import datetime
class TrackCreate(BaseModel):
title: str
artist: str
class TrackResponse(BaseModel):
id: UUID
title: str
artist: str
duration: int
file_size: int
uploaded_by: UUID
created_at: datetime
class Config:
from_attributes = True
class TrackWithUrl(TrackResponse):
url: str

View File

@@ -0,0 +1,33 @@
from pydantic import BaseModel, EmailStr
from uuid import UUID
from datetime import datetime
class UserCreate(BaseModel):
username: str
email: EmailStr
password: str
class UserLogin(BaseModel):
email: EmailStr
password: str
class UserResponse(BaseModel):
id: UUID
username: str
email: str
created_at: datetime
class Config:
from_attributes = True
class Token(BaseModel):
access_token: str
token_type: str = "bearer"
class TokenData(BaseModel):
user_id: UUID | None = None