initial commit
This commit is contained in:
88
backend/app/schemas.py
Normal file
88
backend/app/schemas.py
Normal file
@@ -0,0 +1,88 @@
|
||||
from datetime import datetime
|
||||
from pydantic import BaseModel
|
||||
|
||||
|
||||
# --- Tag ---
|
||||
|
||||
class TagBase(BaseModel):
|
||||
name: str
|
||||
category: str
|
||||
|
||||
|
||||
class TagCreate(TagBase):
|
||||
pass
|
||||
|
||||
|
||||
class TagOut(TagBase):
|
||||
id: int
|
||||
model_config = {"from_attributes": True}
|
||||
|
||||
|
||||
class TagsByCategory(BaseModel):
|
||||
category: str
|
||||
tags: list[TagOut]
|
||||
|
||||
|
||||
# --- Library ---
|
||||
|
||||
class LibraryCreate(BaseModel):
|
||||
name: str
|
||||
path: str
|
||||
|
||||
|
||||
class LibraryOut(BaseModel):
|
||||
id: int
|
||||
name: str
|
||||
path: str
|
||||
model_config = {"from_attributes": True}
|
||||
|
||||
|
||||
# --- MediaItem ---
|
||||
|
||||
class MediaItemOut(BaseModel):
|
||||
id: int
|
||||
library_id: int
|
||||
rel_path: str
|
||||
filename: str
|
||||
media_type: str
|
||||
size_bytes: int | None
|
||||
missing: bool
|
||||
tags: list[TagOut]
|
||||
created_at: datetime
|
||||
updated_at: datetime
|
||||
model_config = {"from_attributes": True}
|
||||
|
||||
|
||||
class MediaItemSummary(BaseModel):
|
||||
id: int
|
||||
filename: str
|
||||
rel_path: str
|
||||
media_type: str
|
||||
missing: bool
|
||||
model_config = {"from_attributes": True}
|
||||
|
||||
|
||||
# --- Browse ---
|
||||
|
||||
class BrowseEntry(BaseModel):
|
||||
name: str
|
||||
type: str # 'dir' | 'image' | 'video'
|
||||
rel_path: str
|
||||
media_item_id: int | None = None
|
||||
|
||||
|
||||
class BrowseResult(BaseModel):
|
||||
path: str
|
||||
entries: list[BrowseEntry]
|
||||
|
||||
|
||||
# --- Search ---
|
||||
|
||||
class SearchResult(BaseModel):
|
||||
items: list[MediaItemOut]
|
||||
|
||||
|
||||
# --- Tag assignment ---
|
||||
|
||||
class TagIdList(BaseModel):
|
||||
tag_ids: list[int]
|
||||
Reference in New Issue
Block a user