change response for comic details

This commit is contained in:
Thomas Peetz
2025-09-20 13:05:07 +02:00
parent fd7a6bd1a1
commit 64ed4876a5
6 changed files with 63 additions and 31 deletions
+37 -18
View File
@@ -2,7 +2,11 @@ from typing import List, Dict, Optional
from pydantic import BaseModel, AnyUrl
from src.core.log_conf import logger
from src.db.models.comic import Comic
from src.schema.comics.artist import ArtistResponse
from src.schema.comics.volume import VolumeResponse
from src.schema.comics.worktype import WorktypeResponse
class ComicResponse(BaseModel):
@@ -10,6 +14,13 @@ class ComicResponse(BaseModel):
title: str
completed: bool
class ComicWorktypeArtistResponse(BaseModel):
worktype: WorktypeResponse
artists: List[ArtistResponse]
class ComicDetailsResponse(BaseModel):
id: str
created: str
@@ -18,9 +29,9 @@ class ComicDetailsResponse(BaseModel):
current_order : bool
weblink: str
publisher: str
volumes: List[str]
works: Dict[str, List[str]]
volumes: List[VolumeResponse]
works: List[ComicWorktypeArtistResponse]
class ComicSchema(BaseModel):
id: str
@@ -33,31 +44,39 @@ class ComicSchema(BaseModel):
def get_short_info(comic: Comic) -> ComicResponse:
response = ComicResponse(
id=comic.id,
title=comic.title,
completed=(comic.completed == 1)
title=str(comic.title),
completed=bool(comic.completed == 1)
)
return response
def get_comic_details(comic: Comic) -> ComicDetailsResponse | None:
volumes = []
def get_comic_details(comic: Comic) -> ComicDetailsResponse:
volumes: List[VolumeResponse] = []
for volume in comic.volumes:
volumes.append(volume.name)
works = {}
volumes.append(VolumeResponse(id=volume.id, name=volume.name))
works: List[ComicWorktypeArtistResponse] = []
works_map: Dict[str, ComicWorktypeArtistResponse] = {}
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)
worktype_id = work.work_type.id
if worktype_id in works_map:
artist = ArtistResponse(id=work.artist.id, name=work.artist.name)
works_map[worktype_id].artists.append(artist)
logger.info(f"add artist to response map: {artist} -> {works_map}")
print(f"add artist to response map: {artist} -> {works_map}")
else:
works[work_type] = [artist_name]
works_map[worktype_id] = ComicWorktypeArtistResponse(
worktype=WorktypeResponse(id=worktype_id, name=work.work_type.name),
artists=[ArtistResponse(id=work.artist.id, name=work.artist.name)]
)
for value in works_map.values():
works.append(value)
response = ComicDetailsResponse(
id=comic.id,
created=str(comic.created_date),
title=comic.title,
completed=comic.completed,
current_order=comic.current_order,
weblink=comic.weblink,
title=str(comic.title),
completed=bool(comic.completed),
current_order=bool(comic.current_order),
weblink=str(comic.weblink),
publisher=comic.publisher.name,
volumes=volumes,
works=works
+6
View File
@@ -0,0 +1,6 @@
from pydantic import BaseModel
class VolumeResponse(BaseModel):
id: str
name: str
+5
View File
@@ -2,3 +2,8 @@ from pydantic import BaseModel
class AddWorkType(BaseModel):
worktype: str
class WorktypeResponse(BaseModel):
id: str
name: str