diff --git a/kontor-angular/src/app/kontor/comic/comic-publishers/comic-publishers.component.html b/kontor-angular/src/app/kontor/comic/comic-publishers/comic-publishers.component.html index 3507aff..bb16b77 100644 --- a/kontor-angular/src/app/kontor/comic/comic-publishers/comic-publishers.component.html +++ b/kontor-angular/src/app/kontor/comic/comic-publishers/comic-publishers.component.html @@ -6,6 +6,23 @@ @if (publisher()) {

{{ publisher().name }}

+ @if (publisher().parent_publisher) { + + } +
+
+ @for (imprint of publisher().imprints; track imprint.id) { +
+ +
+ } +
+
+ @for (comic of publisher().comics; track comic.id) { +
+ +
+ }
} @else {

Publisher Details

diff --git a/kontor-angular/src/app/kontor/comic/comic-publishers/comic-publishers.component.ts b/kontor-angular/src/app/kontor/comic/comic-publishers/comic-publishers.component.ts index 068d81c..ad8f894 100644 --- a/kontor-angular/src/app/kontor/comic/comic-publishers/comic-publishers.component.ts +++ b/kontor-angular/src/app/kontor/comic/comic-publishers/comic-publishers.component.ts @@ -3,15 +3,17 @@ import { Publisher, PublisherDetails } from '../comic.model'; import { ComicPublishersListComponent } from '../comic-publishers-list/comic-publishers-list.component'; import { ActivatedRouteSnapshot, ResolveFn, RouterStateSnapshot } from '@angular/router'; import { PublisherService } from './publisher.service'; +import { ComicPublisherComponent } from "../comic-publisher/comic-publisher.component"; +import { ComicComicComponent } from "../comic-comic/comic-comic.component"; @Component({ selector: 'app-comic-publishers', - imports: [ComicPublishersListComponent], + imports: [ComicPublishersListComponent, ComicPublisherComponent, ComicComicComponent], templateUrl: './comic-publishers.component.html', styleUrl: './comic-publishers.component.css' }) export class ComicPublishersComponent { - publisher = input.required(); + publisher = input.required(); } export const publisherResolver: ResolveFn = (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => { diff --git a/kontor-angular/src/app/kontor/comic/comic.model.ts b/kontor-angular/src/app/kontor/comic/comic.model.ts index 16ec960..85da285 100644 --- a/kontor-angular/src/app/kontor/comic/comic.model.ts +++ b/kontor-angular/src/app/kontor/comic/comic.model.ts @@ -13,11 +13,6 @@ export interface Publisher { name: string; } -export interface PublisherDetails { - id: string; - name: string; - -} export interface Comic { id: string; title: string; @@ -47,6 +42,14 @@ export interface ComicWorktypeArtists { artists: Artist[]; } +export interface PublisherDetails { + id: string; + name: string; + parent_publisher: Publisher; + imprints: Publisher[]; + comics: Comic[]; +} + export interface ComicDetails { id: string; created: string; diff --git a/kontor-api/src/db/repository/comics/publisher.py b/kontor-api/src/db/repository/comics/publisher.py index 0b62a24..a17da64 100644 --- a/kontor-api/src/db/repository/comics/publisher.py +++ b/kontor-api/src/db/repository/comics/publisher.py @@ -1,7 +1,24 @@ +from typing import List + from src.db.models.comic import Publisher +from src.schema.comics.comic import ComicResponse +from src.schema.comics.publisher import PublisherResponse from src.schema.comics.publisher_details import PublisherDetailsResponse -def get_publisher_details(publisher: Publisher): - response: PublisherDetailsResponse = PublisherDetailsResponse(id=publisher.id, name=str(publisher.name)) +def get_publisher_details(publisher: Publisher) -> PublisherDetailsResponse: + imprints: List[PublisherResponse] = [] + for imprint in publisher.imprints: + imprints.append(PublisherResponse(id=imprint.id, name=str(imprint.name))) + comics: List[ComicResponse] = [] + for comic in publisher.comics: + comics.append( + ComicResponse(id=comic.id, title=comic.title, completed=comic.completed) + ) + parent_publisher: PublisherResponse | None = None + if publisher.parent_publisher: + parent_publisher = PublisherResponse(id=publisher.parent_publisher.id, name=str(publisher.parent_publisher.name)) + response: PublisherDetailsResponse = PublisherDetailsResponse( + id=publisher.id, name=str(publisher.name), parent_publisher=parent_publisher, imprints=imprints, comics=comics + ) return response diff --git a/kontor-api/src/schema/comics/publisher_details.py b/kontor-api/src/schema/comics/publisher_details.py index d62303a..5c4444e 100644 --- a/kontor-api/src/schema/comics/publisher_details.py +++ b/kontor-api/src/schema/comics/publisher_details.py @@ -1,5 +1,14 @@ +from typing import List + from pydantic import BaseModel +from src.schema.comics.comic import ComicResponse +from src.schema.comics.publisher import PublisherResponse + + class PublisherDetailsResponse(BaseModel): id: str name: str + parent_publisher: PublisherResponse | None + imprints: List[PublisherResponse] + comics: List[ComicResponse]