"""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