From b4a0c2d7a5c07e08e528c79421c2111a24a36ab4 Mon Sep 17 00:00:00 2001 From: Thomas Peetz Date: Thu, 5 Jun 2025 17:58:27 +0200 Subject: [PATCH] make details for Comic, Artist and Issue clickable, add CustomField to select Comic and Issue --- kontor-api/src/db/models/comic.py | 26 +++++--- .../src/templates/comic/artist_detail.html | 6 +- .../src/templates/comic/comic_detail.html | 2 +- kontor-api/src/templates/comic/comics.html | 10 ++- .../src/templates/comic/issue_detail.html | 17 +++++ kontor-api/src/webapps/comic/route_comics.py | 19 +++++- .../de/thpeetz/kontor/comics/data/Issue.java | 12 ++++ .../kontor/comics/views/IssueForm.java | 5 +- .../kontor/comics/views/IssueWorkForm.java | 12 ++-- .../kontor/comics/views/IssueWorkView.java | 16 ++--- .../kontor/common/views/ComicIssueField.java | 63 +++++++++++++++++++ 11 files changed, 160 insertions(+), 28 deletions(-) create mode 100644 kontor-spring/src/main/java/de/thpeetz/kontor/common/views/ComicIssueField.java diff --git a/kontor-api/src/db/models/comic.py b/kontor-api/src/db/models/comic.py index ab58336..815f217 100644 --- a/kontor-api/src/db/models/comic.py +++ b/kontor-api/src/db/models/comic.py @@ -1,6 +1,6 @@ import uuid from datetime import datetime -from typing import Dict, List, Optional +from typing import Dict, List, Optional, Any from natsort import natsorted from sqlalchemy import Column, ForeignKey, Integer, String, Boolean, func from sqlalchemy.orm import relationship, Mapped, mapped_column @@ -48,10 +48,10 @@ class Comic(Base, BaseMixin): def __str__(self): return f'{self.title}({self.id})' - def get_artists(self) -> Dict[str, List[str]]: - works: Dict[str, List[str]] = {} + def get_artists(self) -> Dict[Any, List[Any]]: + works: Dict[Any, List[Any]] = {} for work in self.comic_works: - work_type = work.work_type.name + work_type = work.work_type artist = work.artist if work_type in works: works[work_type].append(artist) @@ -107,6 +107,18 @@ class Issue(Base, BaseMixin): story_arc = relationship("StoryArc", back_populates="issues") issue_works = relationship("IssueWork") + def get_artists(self) -> Dict[Any, List[Any]]: + works: Dict[Any, List[Any]] = {} + for work in self.issue_works: + work_type = work.work_type + artist = work.artist + if work_type in works: + works[work_type].append(artist) + else: + works[work_type] = [artist] + return works + + class Artist(Base, BaseMixin): __tablename__ = "artist" name = Column(String, nullable=False) @@ -114,10 +126,10 @@ class Artist(Base, BaseMixin): comic_works = relationship("ComicWork") issue_works = relationship("IssueWork") - def get_comics(self) -> Dict[str, List[str]]: - works: Dict[str, List[str]] = {} + def get_comics(self) -> Dict[Any, List[Comic]]: + works: Dict[Any, List[Comic]] = {} for work in self.comic_works: - work_type = work.work_type.name + work_type = work.work_type comic = work.comic if work_type in works: works[work_type].append(comic) diff --git a/kontor-api/src/templates/comic/artist_detail.html b/kontor-api/src/templates/comic/artist_detail.html index 650f796..b540bcd 100644 --- a/kontor-api/src/templates/comic/artist_detail.html +++ b/kontor-api/src/templates/comic/artist_detail.html @@ -29,7 +29,7 @@ {% for work in artist.get_comics() %}

- {{work}}: + {{work.name}}