Files
kontor/kontor-api/src/schema/comics/comic.py
T
2025-05-13 00:42:41 +02:00

57 lines
1.3 KiB
Python

from typing import List, Dict
from pydantic import BaseModel
from src.db.models.comic import Comic
class ComicResponse(BaseModel):
id: str
title: str
completed: bool
class ComicDetailsResponse(BaseModel):
id: str
created: str
title: str
completed : bool
current_order : bool
weblink: str
publisher: str
volumes: List[str]
works: Dict[str, List[str]]
def get_short_info(comic: Comic) -> ComicResponse:
response = ComicResponse(
id=comic.id,
title=comic.title,
completed=(comic.completed == 1)
)
return response
def get_comic_details(comic: Comic) -> ComicDetailsResponse | None:
volumes = []
for volume in comic.volumes:
volumes.append(volume.name)
works = {}
for work in comic.comic_works:
work_type = work.work_type.name
artist_name = work.artist.name
if work_type in works:
works[work_type].append(artist_name)
else:
works[work_type] = [artist_name]
response = ComicDetailsResponse(
id=comic.id,
created=str(comic.created_date),
title=comic.title,
completed=comic.completed,
current_order=comic.current_order,
weblink=comic.weblink,
publisher=comic.publisher.name,
volumes=volumes,
works=works
)
return response