From 0db55e9ba71cea9d2fa953372d43b3164de9b45c Mon Sep 17 00:00:00 2001 From: Thomas Peetz Date: Tue, 23 Sep 2025 17:08:46 +0200 Subject: [PATCH] added issue works on artist details --- .../comic-artists/comic-artists.component.css | 9 +++-- .../comic-artists.component.html | 36 ++++++++++++------- .../src/app/kontor/comic/comic.model.ts | 21 ++++++++++- kontor-api/src/db/repository/comics/artist.py | 24 +++++++------ .../src/schema/comics/artist_details.py | 8 ++++- kontor-api/src/schema/comics/issue.py | 7 ++-- 6 files changed, 75 insertions(+), 30 deletions(-) diff --git a/kontor-angular/src/app/kontor/comic/comic-artists/comic-artists.component.css b/kontor-angular/src/app/kontor/comic/comic-artists/comic-artists.component.css index 6825193..4008df7 100644 --- a/kontor-angular/src/app/kontor/comic/comic-artists/comic-artists.component.css +++ b/kontor-angular/src/app/kontor/comic/comic-artists/comic-artists.component.css @@ -4,10 +4,13 @@ grid-gap: 20px; } section { -margin-left: 10px; -padding: 10px; + margin-left: 10px; + padding: 10px; + background-color: darkgrey; + border-radius: 10px; + margin-bottom: 10px; } article { margin-left: 10px; padding: 5px; -} \ No newline at end of file +} diff --git a/kontor-angular/src/app/kontor/comic/comic-artists/comic-artists.component.html b/kontor-angular/src/app/kontor/comic/comic-artists/comic-artists.component.html index 1d79cc3..94bf2b1 100644 --- a/kontor-angular/src/app/kontor/comic/comic-artists/comic-artists.component.html +++ b/kontor-angular/src/app/kontor/comic/comic-artists/comic-artists.component.html @@ -5,18 +5,30 @@
@if (artist()) { -

{{ artist().name }}

- {{ artist().name }} - @for (work of artist().works; track work.worktype.id) { -
- - @for (comic of work.comics; track comic.id) { -
- -
- } -
- } +
+

{{ artist().name }}

+ {{ artist().name }} +
+ @for (work of artist().comic_works; track work.worktype.id) { +
+ + @for (comic of work.comics; track comic.id) { +
+ +
+ } +
+ } + @for (work of artist().issue_works; track work.worktype.id) { +
+ + @for (issue of work.issues; track issue.id) { +
+ +
+ } +
+ } } @else {

Artist Details

} diff --git a/kontor-angular/src/app/kontor/comic/comic.model.ts b/kontor-angular/src/app/kontor/comic/comic.model.ts index ecbb790..70df33b 100644 --- a/kontor-angular/src/app/kontor/comic/comic.model.ts +++ b/kontor-angular/src/app/kontor/comic/comic.model.ts @@ -16,6 +16,20 @@ export interface Comic { completed: boolean; } +export interface Volume { + id: string; + name: string; +} + +export interface Issue { + id: string; + issue_number: string; + in_stock: boolean; + is_read: boolean; + comic: Comic; + volume: Volume | undefined + +} export interface ComicWork { worktype: string; @@ -38,9 +52,14 @@ export interface ArtistWorktypeComics { comics: Comic[]; } +export interface ArtistWorktypeIssues { + worktype: Worktype; + issues: Issue[]; +} export interface ArtistDetails { id: string; name: string; weblink: string; - works: ArtistWorktypeComics[]; + comic_works: ArtistWorktypeComics[]; + issue_works: ArtistWorktypeIssues[]; } diff --git a/kontor-api/src/db/repository/comics/artist.py b/kontor-api/src/db/repository/comics/artist.py index 80c328a..b8b16c3 100644 --- a/kontor-api/src/db/repository/comics/artist.py +++ b/kontor-api/src/db/repository/comics/artist.py @@ -1,29 +1,31 @@ from typing import List from src.db.models.comic import Artist -from src.schema.comics.artist_details import ArtistDetailResponse, ArtistWorktypeComicResponse +from src.schema.comics.artist_details import ArtistDetailResponse, ArtistWorktypeComicResponse, ArtistWorktypeIssueResponse from src.schema.comics.comic import ComicResponse from src.schema.comics.worktype import WorktypeResponse def get_artist_details(artist: Artist) -> ArtistDetailResponse: - works: List[ArtistWorktypeComicResponse] = [] - works_map = {} + comic_works: List[ArtistWorktypeComicResponse] = [] + comic_works_map = {} for work in artist.comic_works: worktype_id = work.work_type.id - if worktype_id in works_map: + if worktype_id in comic_works_map: comic = ComicResponse(id=work.comic.id, title=work.comic.title, completed=work.comic.completed) - works_map[worktype_id].comics.append(comic) + comic_works_map[worktype_id].comics.append(comic) else: - works_map[worktype_id] = ArtistWorktypeComicResponse( + comic_works_map[worktype_id] = ArtistWorktypeComicResponse( worktype=WorktypeResponse(id=worktype_id, name=work.work_type.name), comics=[ComicResponse(id=work.comic.id, title=work.comic.title, completed=work.comic.completed)] ) - for value in works_map.values(): - works.append(value) + for value in comic_works_map.values(): + comic_works.append(value) + issue_works: List[ArtistWorktypeIssueResponse] = [] response = ArtistDetailResponse( id=artist.id, - name=artist.name, - weblink=artist.weblink, - works=works + name=str(artist.name), + weblink=str(artist.weblink), + comic_works=comic_works, + issue_works=issue_works, ) return response diff --git a/kontor-api/src/schema/comics/artist_details.py b/kontor-api/src/schema/comics/artist_details.py index cd03ca2..dd42e89 100644 --- a/kontor-api/src/schema/comics/artist_details.py +++ b/kontor-api/src/schema/comics/artist_details.py @@ -2,6 +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.worktype import WorktypeResponse @@ -9,8 +10,13 @@ class ArtistWorktypeComicResponse(BaseModel): worktype: WorktypeResponse comics: List[ComicResponse] +class ArtistWorktypeIssueResponse(BaseModel): + worktype: WorktypeResponse + issues: List[IssueDetailsResponse] + class ArtistDetailResponse(BaseModel): id: str name: str weblink: str - works: List[ArtistWorktypeComicResponse] + comic_works: List[ArtistWorktypeComicResponse] + issue_works: List[ArtistWorktypeIssueResponse] diff --git a/kontor-api/src/schema/comics/issue.py b/kontor-api/src/schema/comics/issue.py index 465085b..3c39799 100644 --- a/kontor-api/src/schema/comics/issue.py +++ b/kontor-api/src/schema/comics/issue.py @@ -1,10 +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_id: str - volume_id: str | None + comic: ComicResponse + volume: VolumeResponse | None