89 lines
1.4 KiB
Python
89 lines
1.4 KiB
Python
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]
|