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) {
-
-
-
- }
-
- }
+
+ @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