Manglify_Backend / db /schemas.py
Ying Jiang
check point 1
5028126
raw
history blame
2.02 kB
"""Response schemas for API endpoints. Pure Pydantic models (no table)."""
import uuid
from datetime import datetime
from typing import Optional
from sqlmodel import Field, SQLModel
class MangaOut(SQLModel):
"""Umbrella manga list response."""
id: Optional[int] = None
manga_title: str
created_at: Optional[datetime] = None
updated_at: Optional[datetime] = None
class ChapterListOut(SQLModel):
"""Chapter list response (includes manga_title, provider_id from chapter)."""
manga_title: str
provider_id: str
id: int
chapter_number: float
created_at: Optional[datetime] = None
updated_at: Optional[datetime] = None
class ReadingListCollectionOut(SQLModel):
"""A named reading list owned by the user."""
id: int
name: str
manga_count: int = 0
created_at: Optional[datetime] = None
updated_at: Optional[datetime] = None
class ReadingListCollectionCreateIn(SQLModel):
name: str
class ReadingListCollectionRenameIn(SQLModel):
name: str
class ReadingListItemOut(SQLModel):
"""One manga row inside a named list (with umbrella title + optional MangaDex id)."""
id: int
reading_list_id: int
manga_id: int
manga_title: str
external_manga_id: Optional[str] = None
last_chapter_number: Optional[float] = None
updated_at: Optional[datetime] = None
class ReadingListAddIn(SQLModel):
"""Add a title by provider catalog id (e.g. MangaDex UUID)."""
provider_id: str = Field(default="mangadex")
external_manga_id: str
manga_title: str
last_chapter_number: Optional[float] = None
class SegmentListOut(SQLModel):
"""Segment list response (join of Segments + Pages + Chapters + Manga)."""
id: int
provider_id: str
manga_title: str
chapter_number: float
page_number: int
segment_index: int
x1: float
y1: float
x2: float
y2: float
original_text: str
translated_text: str
language_code: str
created_at: Optional[datetime] = None