From a9829bf1189467085c1e6b266424f79a6f158ffb Mon Sep 17 00:00:00 2001 From: Thomas Peetz Date: Thu, 2 Oct 2025 14:18:48 +0200 Subject: [PATCH] extend ComicDetailsResponse --- kontor-api/src/apis/version1/comic.py | 4 ++-- kontor-api/src/db/repository/comics/comic.py | 21 ++++++++++++++----- .../src/schema/comics/artist_details.py | 2 +- kontor-api/src/schema/comics/comic_details.py | 5 ++++- kontor-api/src/schema/comics/issue.py | 7 +------ kontor-api/src/schema/comics/issue_details.py | 13 ++++++++++++ kontor-api/src/schema/comics/publisher.py | 6 ++++++ 7 files changed, 43 insertions(+), 15 deletions(-) create mode 100644 kontor-api/src/schema/comics/issue_details.py create mode 100644 kontor-api/src/schema/comics/publisher.py diff --git a/kontor-api/src/apis/version1/comic.py b/kontor-api/src/apis/version1/comic.py index 4b2abde..95fd271 100644 --- a/kontor-api/src/apis/version1/comic.py +++ b/kontor-api/src/apis/version1/comic.py @@ -10,7 +10,7 @@ from src.schema.comics.comic import ComicResponse from src.schema.comics.artist import ArtistCreation, ArtistResponse from src.db.models.comic import Comic, Artist, Issue from src.schema.comics.comic_details import ComicDetailsResponse -from src.schema.comics.issue import IssueDetailsResponse +from src.schema.comics.issue_details import IssueDetailsResponse router = APIRouter() @@ -59,7 +59,7 @@ def add_artist(db: SessionDep, artist_creation: ArtistCreation) -> ArtistRespons db.commit() except: raise HTTPException(status_code=409, detail="Artist already added") - response = ArtistResponse(id=artist.id, name=artist.name) + response = ArtistResponse(id=artist.id, name=str(artist.name)) return response @router.get("/issues", response_model=List[IssueDetailsResponse]) diff --git a/kontor-api/src/db/repository/comics/comic.py b/kontor-api/src/db/repository/comics/comic.py index 315a59f..4821d29 100644 --- a/kontor-api/src/db/repository/comics/comic.py +++ b/kontor-api/src/db/repository/comics/comic.py @@ -7,7 +7,9 @@ from src.db.models.comic import Comic, Issue from src.schema.comics.artist import ArtistResponse from src.schema.comics.comic import ComicResponse, ComicSchema from src.schema.comics.comic_details import ComicDetailsResponse, ComicWorktypeArtistResponse -from src.schema.comics.issue import IssueDetailsResponse +from src.schema.comics.issue import IssueResponse +from src.schema.comics.issue_details import IssueDetailsResponse +from src.schema.comics.publisher import PublisherResponse from src.schema.comics.volume import VolumeResponse from src.schema.comics.worktype import WorktypeResponse @@ -23,8 +25,8 @@ def get_issue_details(issue: Issue) -> IssueDetailsResponse: issue_number=str(issue.issue_number), in_stock=bool(issue.in_stock), is_read=bool(issue.is_read), - comic_id=str(issue.comic_id), - volume_id=str(issue.volume_id) + comic=ComicResponse(id=issue.comic.id, title=issue.comic.title, completed=issue.comic.completed), + volume=VolumeResponse(id=issue.volume.id, name=issue.volume.name) ) return response @@ -46,6 +48,14 @@ def get_comic_details(comic: Comic) -> ComicDetailsResponse: volumes: List[VolumeResponse] = [] for volume in comic.volumes: volumes.append(VolumeResponse(id=volume.id, name=volume.name)) + issues: List[IssueResponse] = [] + for issue in comic.issues: + issues.append(IssueResponse( + id=issue.id, + issue_number=issue.issue_number, + in_stock=issue.in_stock, + is_read=issue.is_read + )) works: List[ComicWorktypeArtistResponse] = [] works_map: Dict[str, ComicWorktypeArtistResponse] = {} for work in comic.comic_works: @@ -63,13 +73,14 @@ def get_comic_details(comic: Comic) -> ComicDetailsResponse: for value in works_map.values(): works.append(value) response = ComicDetailsResponse( - id=comic.id, + id=str(comic.id), created=str(comic.created_date), title=str(comic.title), completed=bool(comic.completed), current_order=bool(comic.current_order), weblink=str(comic.weblink), - publisher=comic.publisher.name, + publisher=PublisherResponse(id=comic.publisher.id, name=comic.publisher.name), + issues=issues, volumes=volumes, works=works ) diff --git a/kontor-api/src/schema/comics/artist_details.py b/kontor-api/src/schema/comics/artist_details.py index dd42e89..416257c 100644 --- a/kontor-api/src/schema/comics/artist_details.py +++ b/kontor-api/src/schema/comics/artist_details.py @@ -2,7 +2,7 @@ from typing import List from pydantic import BaseModel from src.schema.comics.comic import ComicResponse -from src.schema.comics.issue import IssueDetailsResponse +from src.schema.comics.issue_details import IssueDetailsResponse from src.schema.comics.worktype import WorktypeResponse diff --git a/kontor-api/src/schema/comics/comic_details.py b/kontor-api/src/schema/comics/comic_details.py index 99411b7..16de453 100644 --- a/kontor-api/src/schema/comics/comic_details.py +++ b/kontor-api/src/schema/comics/comic_details.py @@ -2,6 +2,8 @@ from typing import List from pydantic import BaseModel from src.schema.comics.artist import ArtistResponse +from src.schema.comics.issue import IssueResponse +from src.schema.comics.publisher import PublisherResponse from src.schema.comics.volume import VolumeResponse from src.schema.comics.worktype import WorktypeResponse @@ -18,6 +20,7 @@ class ComicDetailsResponse(BaseModel): completed : bool current_order : bool weblink: str - publisher: str + publisher: PublisherResponse + issues: List[IssueResponse] volumes: List[VolumeResponse] works: List[ComicWorktypeArtistResponse] diff --git a/kontor-api/src/schema/comics/issue.py b/kontor-api/src/schema/comics/issue.py index 3c39799..719114c 100644 --- a/kontor-api/src/schema/comics/issue.py +++ b/kontor-api/src/schema/comics/issue.py @@ -1,13 +1,8 @@ from pydantic import BaseModel -from src.schema.comics.comic import ComicResponse -from src.schema.comics.volume import VolumeResponse - -class IssueDetailsResponse(BaseModel): +class IssueResponse(BaseModel): id: str issue_number: str in_stock: bool is_read: bool - comic: ComicResponse - volume: VolumeResponse | None diff --git a/kontor-api/src/schema/comics/issue_details.py b/kontor-api/src/schema/comics/issue_details.py new file mode 100644 index 0000000..3c39799 --- /dev/null +++ b/kontor-api/src/schema/comics/issue_details.py @@ -0,0 +1,13 @@ +from pydantic import BaseModel + +from src.schema.comics.comic import ComicResponse +from src.schema.comics.volume import VolumeResponse + + +class IssueDetailsResponse(BaseModel): + id: str + issue_number: str + in_stock: bool + is_read: bool + comic: ComicResponse + volume: VolumeResponse | None diff --git a/kontor-api/src/schema/comics/publisher.py b/kontor-api/src/schema/comics/publisher.py new file mode 100644 index 0000000..bbbe175 --- /dev/null +++ b/kontor-api/src/schema/comics/publisher.py @@ -0,0 +1,6 @@ +from pydantic import BaseModel + + +class PublisherResponse(BaseModel): + id: str + name: str