extend ComicDetailsResponse

This commit is contained in:
Thomas Peetz
2025-10-02 14:18:48 +02:00
parent d8e4cbfb9a
commit a9829bf118
7 changed files with 43 additions and 15 deletions
+2 -2
View File
@@ -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])
+16 -5
View File
@@ -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
)
@@ -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
@@ -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]
+1 -6
View File
@@ -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
@@ -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
@@ -0,0 +1,6 @@
from pydantic import BaseModel
class PublisherResponse(BaseModel):
id: str
name: str