41 lines
940 B
Python
Executable File
41 lines
940 B
Python
Executable File
import uuid
|
|
from datetime import datetime
|
|
|
|
from pydantic import BaseModel, ConfigDict
|
|
|
|
from rehearsalhub.schemas.member import MemberRead
|
|
|
|
|
|
class BandMemberRead(BaseModel):
|
|
model_config = ConfigDict(from_attributes=True)
|
|
member: MemberRead
|
|
role: str
|
|
instrument: str | None = None
|
|
joined_at: datetime
|
|
|
|
|
|
class BandCreate(BaseModel):
|
|
name: str
|
|
slug: str
|
|
genre_tags: list[str] = []
|
|
nc_base_path: str | None = None # e.g. "Bands/MyBand/" — defaults to "bands/{slug}/"
|
|
|
|
|
|
class BandUpdate(BaseModel):
|
|
nc_folder_path: str | None = None # update the Nextcloud base folder for scans
|
|
|
|
|
|
class BandRead(BaseModel):
|
|
model_config = ConfigDict(from_attributes=True)
|
|
id: uuid.UUID
|
|
name: str
|
|
slug: str
|
|
genre_tags: list[str]
|
|
nc_folder_path: str | None = None
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
|
|
|
|
class BandReadWithMembers(BandRead):
|
|
memberships: list[BandMemberRead] = []
|