diff --git a/kontor-api/src/apis/version1/comic.py b/kontor-api/src/apis/version1/comic.py index 2541f2b..5a70195 100644 --- a/kontor-api/src/apis/version1/comic.py +++ b/kontor-api/src/apis/version1/comic.py @@ -2,10 +2,11 @@ from typing import List, AnyStr from fastapi import APIRouter, HTTPException, status from src.apis.utils import SessionDep -from src.db.repository.comic import get_artist_details, list_comics +from src.db.repository.comic import get_artist_details, list_comics, get_issue_details from src.schema.comics.comic import ComicResponse, ComicDetailsResponse, get_comic_details, get_short_info from src.schema.comics.artist import ArtistCreation, ArtistDetailResponse, ArtistResponse -from src.db.models.comic import Comic, Artist +from src.db.models.comic import Comic, Artist, Issue +from src.schema.comics.issue import IssueDetailsResponse router = APIRouter( prefix="/comic", @@ -59,3 +60,11 @@ def add_artist(db: SessionDep, artist_creation: ArtistCreation) -> ArtistRespons response = ArtistResponse(id=artist.id, name=artist.name) return response +@router.get("/issues", response_model=List[IssueDetailsResponse]) +def get_issues(db: SessionDep) -> List[IssueDetailsResponse]: + results: List[IssueDetailsResponse] = [] + issues = db.query(Issue).all() + for issue in issues: + results.append(get_issue_details(issue)) + return results + diff --git a/kontor-api/src/db/repository/comic.py b/kontor-api/src/db/repository/comic.py index 3388bb4..a8774c5 100644 --- a/kontor-api/src/db/repository/comic.py +++ b/kontor-api/src/db/repository/comic.py @@ -2,8 +2,9 @@ from typing import List, Type from sqlalchemy.orm import Session -from src.db.models.comic import Artist, Comic +from src.db.models.comic import Artist, Comic, Issue from src.schema.comics.artist import ArtistDetailResponse +from src.schema.comics.issue import IssueDetailsResponse def get_artist_details(artist: Artist) -> ArtistDetailResponse: @@ -25,3 +26,15 @@ def get_artist_details(artist: Artist) -> ArtistDetailResponse: def list_comics(db: Session) -> List[Type[Comic]]: comics = db.query(Comic).all() return comics + + +def get_issue_details(issue: Issue) -> IssueDetailsResponse: + response = IssueDetailsResponse( + id=issue.id, + issue_number=issue.issue_number, + in_stock=issue.in_stock, + is_read=issue.is_read, + comic_id=issue.comic_id, + volume_id=issue.volume_id + ) + return response diff --git a/kontor-api/src/schema/comics/issue.py b/kontor-api/src/schema/comics/issue.py new file mode 100644 index 0000000..465085b --- /dev/null +++ b/kontor-api/src/schema/comics/issue.py @@ -0,0 +1,10 @@ +from pydantic import BaseModel + + +class IssueDetailsResponse(BaseModel): + id: str + issue_number: str + in_stock: bool + is_read: bool + comic_id: str + volume_id: str | None diff --git a/kontor-api/src/templates/comic/comic_detail.html b/kontor-api/src/templates/comic/comic_detail.html index 7a903e9..76a5b79 100644 --- a/kontor-api/src/templates/comic/comic_detail.html +++ b/kontor-api/src/templates/comic/comic_detail.html @@ -59,7 +59,7 @@
| Issue Number | +{{issue.issue_number}} | +|
|---|---|---|
| Auf Lager | ++ {% with check=issue.in_stock %} + {% include "components/check.html" %} + {% endwith %} + | +|
| Gelesen | ++ {% with check=issue.is_read %} + {% include "components/check.html" %} + {% endwith %} + | +|
| Comic | ++ {{issue.comic.title}} + | +|
| Volume | ++ {{issue.volume.name}} + | +|
| Data Created | +{{issue.created_date}} | +|
| Data Modified | +{{issue.last_modified_date}} | +|