diff --git a/kontor-api/src/db/models/comic.py b/kontor-api/src/db/models/comic.py index f498571..ab58336 100644 --- a/kontor-api/src/db/models/comic.py +++ b/kontor-api/src/db/models/comic.py @@ -105,12 +105,14 @@ class Issue(Base, BaseMixin): volume = relationship("Volume", back_populates="issues") story_arc_id = Column(String, ForeignKey("story_arc.id"), nullable=True) story_arc = relationship("StoryArc", back_populates="issues") + issue_works = relationship("IssueWork") class Artist(Base, BaseMixin): __tablename__ = "artist" name = Column(String, nullable=False) weblink = Column(String, nullable=True) comic_works = relationship("ComicWork") + issue_works = relationship("IssueWork") def get_comics(self) -> Dict[str, List[str]]: works: Dict[str, List[str]] = {} @@ -128,6 +130,7 @@ class WorkType(Base, BaseMixin): __tablename__ = "worktype" name = Column(String, nullable=False, unique=True) comic_works = relationship("ComicWork") + issue_works = relationship("IssueWork") def get_artists(self) -> Dict[str, List[str]]: works: Dict[str, List[str]] = {} @@ -155,3 +158,14 @@ class ComicWork(Base, BaseMixin): artist = relationship("Artist", back_populates="comic_works") work_type_id = Column(String, ForeignKey("worktype.id"), nullable=False) work_type = relationship("WorkType", back_populates="comic_works") + + +class IssueWork(Base, BaseMixin): + __tablename__ = "issue_work" + issue_id = Column(String, ForeignKey("issue.id"), nullable=False) + issue = relationship("Issue", back_populates="issue_works") + artist_id = Column(String, ForeignKey("artist.id"), nullable=False) + artist = relationship("Artist", back_populates="issue_works") + work_type_id = Column(String, ForeignKey("worktype.id"), nullable=False) + work_type = relationship("WorkType", back_populates="issue_works") + diff --git a/kontor-scripts/db/models/__init__.py b/kontor-scripts/db/models/__init__.py index cefefe5..22b716a 100644 --- a/kontor-scripts/db/models/__init__.py +++ b/kontor-scripts/db/models/__init__.py @@ -20,6 +20,7 @@ from db.models.comic import ( TradePaperback, Volume, ComicWork, + IssueWork, Artist, Comic, Publisher, @@ -61,6 +62,7 @@ registry = { Issue.__tablename__: Issue, TradePaperback.__tablename__: TradePaperback, ComicWork.__tablename__: ComicWork, + IssueWork.__tablename__: IssueWork, Article.__tablename__: Article, BookshelfPublisher.__tablename__: BookshelfPublisher, Book.__tablename__: Book, diff --git a/kontor-scripts/db/models/comic.py b/kontor-scripts/db/models/comic.py index f8bc034..180618f 100644 --- a/kontor-scripts/db/models/comic.py +++ b/kontor-scripts/db/models/comic.py @@ -195,6 +195,7 @@ class Issue(Base, BaseMixin): volume = relationship("Volume", back_populates="issues") story_arc_id = Column(String, ForeignKey("story_arc.id"), nullable=True) story_arc = relationship("StoryArc", back_populates="issues") + issue_works = relationship("IssueWork") def import_dict(self, import_data: Dict[AnyStr, Any]): self.id = import_data['id'] @@ -236,6 +237,7 @@ class Artist(Base, BaseMixin): name = Column(String, nullable=False) weblink = Column(String, nullable=True) comic_works = relationship("ComicWork") + issue_works = relationship("IssueWork") def import_dict(self, import_data: Dict[AnyStr, Any]): self.id = import_data['id'] @@ -262,6 +264,7 @@ class WorkType(Base, BaseMixin): __tablename__ = "worktype" name = Column(String, nullable=False, unique=True) comic_works = relationship("ComicWork") + issue_works = relationship("IssueWork") def __repr__(self): return f'Worktype({self.id} {self.version} {self.name} {len(self.comic_works)})' @@ -316,3 +319,35 @@ class ComicWork(Base, BaseMixin): 'work_type_id': self.work_type_id } return item + + +class IssueWork(Base, BaseMixin): + __tablename__ = "issue_work" + issue_id = Column(String, ForeignKey("issue.id"), nullable=False) + issue = relationship("Issue", back_populates="issue_works") + artist_id = Column(String, ForeignKey("artist.id"), nullable=False) + artist = relationship("Artist", back_populates="issue_works") + work_type_id = Column(String, ForeignKey("worktype.id"), nullable=False) + work_type = relationship("WorkType", back_populates="issue_works") + + def import_dict(self, import_data: Dict[AnyStr, Any]): + self.id = import_data['id'] + self.created_date = import_data['created_date'] + self.last_modified_date = import_data['last_modified_date'] + self.version = import_data['version'] + self.issue_id = import_data['issue_id'] + self.artist_id = import_data['artist_id'] + self.work_type_id = import_data['work_type_id'] + + def export_dict(self) -> Dict[AnyStr, Any]: + item: Dict[AnyStr, Any] = { + 'id': self.id, + 'created_date': str(self.created_date), + 'last_modified_date': str(self.last_modified_date), + 'version': self.version, + 'issue_id': self.issue_id, + 'artist_id': self.artist_id, + 'work_type_id': self.work_type_id + } + return item + diff --git a/kontor-spring/src/main/java/de/thpeetz/kontor/admin/AdminConstants.java b/kontor-spring/src/main/java/de/thpeetz/kontor/admin/AdminConstants.java index 97cee54..5beefb1 100644 --- a/kontor-spring/src/main/java/de/thpeetz/kontor/admin/AdminConstants.java +++ b/kontor-spring/src/main/java/de/thpeetz/kontor/admin/AdminConstants.java @@ -3,15 +3,17 @@ package de.thpeetz.kontor.admin; import com.vaadin.flow.component.icon.VaadinIcon; import com.vaadin.flow.component.sidenav.SideNavItem; import com.vaadin.flow.router.RouterLink; -import de.thpeetz.kontor.admin.views.*; +import de.thpeetz.kontor.admin.views.AssignmentView; +import de.thpeetz.kontor.admin.views.PermissionView; +import de.thpeetz.kontor.admin.views.ProfileView; import de.thpeetz.kontor.comics.ComicConstants; import de.thpeetz.kontor.comics.views.ComicWorkView; +import de.thpeetz.kontor.comics.views.IssueWorkView; import de.thpeetz.kontor.media.MediaConstants; import de.thpeetz.kontor.media.views.MediaActorFileView; public class AdminConstants { - private AdminConstants() { // private constructor to hide the implicit public one } @@ -46,6 +48,7 @@ public class AdminConstants { administration.addItem(new SideNavItem(PERMISSION, PermissionView.class)); SideNavItem data = new SideNavItem(DATA, ASSIGNMENT_ROUTE, VaadinIcon.DATABASE.create()); data.addItem(new SideNavItem(ComicConstants.COMICWORK, ComicWorkView.class)); + data.addItem(new SideNavItem(ComicConstants.ISSUEWORK, IssueWorkView.class)); data.addItem(new SideNavItem(MediaConstants.MEDIAACTORFILE, MediaActorFileView.class)); data.addItem(new SideNavItem(AUTHORIZATION, AssignmentView.class)); administration.addItem(data); diff --git a/kontor-spring/src/main/java/de/thpeetz/kontor/comics/ComicConstants.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/ComicConstants.java index 86dc359..2c6c559 100644 --- a/kontor-spring/src/main/java/de/thpeetz/kontor/comics/ComicConstants.java +++ b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/ComicConstants.java @@ -9,6 +9,7 @@ import de.thpeetz.kontor.comics.views.ArtistView; import de.thpeetz.kontor.comics.views.ComicView; import de.thpeetz.kontor.comics.views.ComicWorkView; import de.thpeetz.kontor.comics.views.IssueView; +import de.thpeetz.kontor.comics.views.IssueWorkView; import de.thpeetz.kontor.comics.views.PublisherView; import de.thpeetz.kontor.comics.views.StoryArcView; import de.thpeetz.kontor.comics.views.TradePaperbackView; @@ -25,7 +26,9 @@ public class ComicConstants { public static final String PUBLISHER = "Publisher"; public static final String PUBLISHER_ROUTE = "comics/publisher"; public static final String COMICWORK = "ComicWork"; + public static final String ISSUEWORK = "IssueWork"; public static final String COMICWORK_ROUTE = "comics/comicwork"; + public static final String ISSUEWORK_ROUTE = "comics/issuework"; public static final String WORKTYPE = "Worktype"; public static final String WORKTYPE_ROUTE = "comics/worktype"; public static final String ARTIST = "Artist"; @@ -55,6 +58,10 @@ public class ComicConstants { return new RouterLink(COMICWORK, ComicWorkView.class); } + public static RouterLink getIssueWorkLink() { + return new RouterLink(ISSUEWORK, IssueWorkView.class); + } + public static RouterLink getIssueLink() { return new RouterLink(ISSUE, IssueView.class); } diff --git a/kontor-spring/src/main/java/de/thpeetz/kontor/comics/SetupModuleComics.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/SetupModuleComics.java index 0b6cffb..16d716e 100644 --- a/kontor-spring/src/main/java/de/thpeetz/kontor/comics/SetupModuleComics.java +++ b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/SetupModuleComics.java @@ -1,30 +1,19 @@ package de.thpeetz.kontor.comics; -import java.util.List; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationListener; import org.springframework.context.event.ContextRefreshedEvent; import org.springframework.stereotype.Component; -import de.thpeetz.kontor.comics.data.Artist; -import de.thpeetz.kontor.comics.data.ArtistRepository; -import de.thpeetz.kontor.comics.data.Comic; -import de.thpeetz.kontor.comics.data.ComicRepository; -import de.thpeetz.kontor.comics.data.ComicWork; -import de.thpeetz.kontor.comics.data.ComicWorkRepository; -import de.thpeetz.kontor.comics.data.Issue; -import de.thpeetz.kontor.comics.data.IssueRepository; -import de.thpeetz.kontor.comics.data.Publisher; -import de.thpeetz.kontor.comics.data.PublisherRepository; -import de.thpeetz.kontor.comics.data.StoryArc; -import de.thpeetz.kontor.comics.data.StoryArcRepository; -import de.thpeetz.kontor.comics.data.TradePaperback; -import de.thpeetz.kontor.comics.data.TradePaperbackRepository; -import de.thpeetz.kontor.comics.data.Volume; -import de.thpeetz.kontor.comics.data.VolumeRepository; -import de.thpeetz.kontor.comics.data.Worktype; -import de.thpeetz.kontor.comics.data.WorktypeRepository; +import de.thpeetz.kontor.comics.repository.ArtistRepository; +import de.thpeetz.kontor.comics.repository.ComicRepository; +import de.thpeetz.kontor.comics.repository.ComicWorkRepository; +import de.thpeetz.kontor.comics.repository.IssueRepository; +import de.thpeetz.kontor.comics.repository.PublisherRepository; +import de.thpeetz.kontor.comics.repository.StoryArcRepository; +import de.thpeetz.kontor.comics.repository.TradePaperbackRepository; +import de.thpeetz.kontor.comics.repository.VolumeRepository; +import de.thpeetz.kontor.comics.repository.WorktypeRepository; import lombok.extern.slf4j.Slf4j; @Slf4j diff --git a/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/Artist.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/Artist.java index 094e966..d7bda7f 100644 --- a/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/Artist.java +++ b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/Artist.java @@ -37,6 +37,10 @@ public class Artist extends AbstractEntity { @Nullable List comicWorks = new LinkedList<>(); + @OneToMany(fetch = FetchType.EAGER, mappedBy = "artist", cascade = CascadeType.REFRESH, orphanRemoval = true) + @Nullable + List issueWorks = new LinkedList<>(); + @Override public String toString() { final StringBuffer sb = new StringBuffer("Artist{"); diff --git a/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/Issue.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/Issue.java index cf264a1..4b2095a 100644 --- a/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/Issue.java +++ b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/Issue.java @@ -5,19 +5,16 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import de.thpeetz.kontor.common.data.*; import io.hypersistence.utils.hibernate.type.basic.YearMonthDateType; import jakarta.annotation.Nullable; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToOne; +import jakarta.persistence.*; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.Setter; -import lombok.ToString; import org.hibernate.annotations.Type; import java.time.YearMonth; +import java.util.*; @Getter @Setter @@ -58,6 +55,10 @@ public class Issue extends AbstractEntity { private Boolean inStock; + @OneToMany(fetch = FetchType.EAGER, mappedBy = "issue", cascade = CascadeType.REFRESH, orphanRemoval = true) + @Nullable + List issueWorks; + public String getComicTitle() { return comic.getTitle(); } diff --git a/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/IssueWork.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/IssueWork.java new file mode 100644 index 0000000..b9d545c --- /dev/null +++ b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/IssueWork.java @@ -0,0 +1,48 @@ +package de.thpeetz.kontor.comics.data; + +import de.thpeetz.kontor.common.data.AbstractEntity; +import jakarta.persistence.Entity; +import jakarta.persistence.Index; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; +import jakarta.persistence.UniqueConstraint; +import jakarta.validation.constraints.NotNull; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@EqualsAndHashCode(callSuper = false) +@Entity +@Table(indexes = {@Index(columnList = "issue_id, artist_id, workType_id") }, + uniqueConstraints = @UniqueConstraint(columnNames = {"issue_id", "artist_id", "workType_id" }) +) +public class IssueWork extends AbstractEntity { + + @ManyToOne + @JoinColumn(name = "issue_id") + @NotNull + private Issue issue; + + @ManyToOne + @JoinColumn(name = "artist_id") + @NotNull + private Artist artist; + + @ManyToOne + @JoinColumn(name = "workType_id") + @NotNull + private Worktype workType; + + @Override + public String toString() { + final StringBuilder sb = new StringBuilder("IssueWork{"); + sb.append("issue=").append(issue); + sb.append(", artist=").append(artist); + sb.append(", workType=").append(workType); + sb.append('}'); + return sb.toString(); + } +} diff --git a/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/Worktype.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/Worktype.java index 9c83133..294ecc2 100644 --- a/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/Worktype.java +++ b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/Worktype.java @@ -34,6 +34,10 @@ public class Worktype extends AbstractEntity { @Nullable List comicWorks = new LinkedList<>(); + @OneToMany(fetch = FetchType.EAGER, mappedBy = "workType", cascade = CascadeType.REFRESH, orphanRemoval = true) + @Nullable + List issueWorks = new LinkedList<>(); + @Override public String toString() { final StringBuffer sb = new StringBuffer("Worktype{"); diff --git a/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/ArtistRepository.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/repository/ArtistRepository.java similarity index 86% rename from kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/ArtistRepository.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/comics/repository/ArtistRepository.java index a5b94f2..feff0c0 100644 --- a/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/ArtistRepository.java +++ b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/repository/ArtistRepository.java @@ -1,7 +1,8 @@ -package de.thpeetz.kontor.comics.data; +package de.thpeetz.kontor.comics.repository; import java.util.List; +import de.thpeetz.kontor.comics.data.*; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; diff --git a/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/ComicRepository.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/repository/ComicRepository.java similarity index 87% rename from kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/ComicRepository.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/comics/repository/ComicRepository.java index 3a3e61f..13a4fbc 100644 --- a/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/ComicRepository.java +++ b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/repository/ComicRepository.java @@ -1,7 +1,8 @@ -package de.thpeetz.kontor.comics.data; +package de.thpeetz.kontor.comics.repository; import java.util.List; +import de.thpeetz.kontor.comics.data.*; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; diff --git a/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/ComicWorkRepository.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/repository/ComicWorkRepository.java similarity index 85% rename from kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/ComicWorkRepository.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/comics/repository/ComicWorkRepository.java index 6b3540a..9eba50e 100644 --- a/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/ComicWorkRepository.java +++ b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/repository/ComicWorkRepository.java @@ -1,7 +1,8 @@ -package de.thpeetz.kontor.comics.data; +package de.thpeetz.kontor.comics.repository; import java.util.List; +import de.thpeetz.kontor.comics.data.*; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; diff --git a/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/IssueRepository.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/repository/IssueRepository.java similarity index 87% rename from kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/IssueRepository.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/comics/repository/IssueRepository.java index af10705..9719304 100644 --- a/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/IssueRepository.java +++ b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/repository/IssueRepository.java @@ -1,7 +1,8 @@ -package de.thpeetz.kontor.comics.data; +package de.thpeetz.kontor.comics.repository; import java.util.List; +import de.thpeetz.kontor.comics.data.*; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; diff --git a/kontor-spring/src/main/java/de/thpeetz/kontor/comics/repository/IssueWorkRepository.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/repository/IssueWorkRepository.java new file mode 100644 index 0000000..a2e0347 --- /dev/null +++ b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/repository/IssueWorkRepository.java @@ -0,0 +1,15 @@ +package de.thpeetz.kontor.comics.repository; + +import de.thpeetz.kontor.comics.data.*; +import org.springframework.data.jpa.repository.*; + +import java.util.*; + +public interface IssueWorkRepository extends JpaRepository { + + @Query("SELECT i from IssueWork i where i.issue = ?1 and i.artist = ?2 and i.workType = ?3") + IssueWork findbyIssueAndArtistAndWorktype(Issue issue, Artist artist, Worktype worktype); + + @Query("select i from IssueWork i where i.issue = ?1") + List findByIssue(Issue issue); +} diff --git a/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/PublisherRepository.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/repository/PublisherRepository.java similarity index 86% rename from kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/PublisherRepository.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/comics/repository/PublisherRepository.java index 5b5587d..076b32e 100644 --- a/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/PublisherRepository.java +++ b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/repository/PublisherRepository.java @@ -1,7 +1,8 @@ -package de.thpeetz.kontor.comics.data; +package de.thpeetz.kontor.comics.repository; import java.util.List; +import de.thpeetz.kontor.comics.data.*; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; diff --git a/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/StoryArcRepository.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/repository/StoryArcRepository.java similarity index 87% rename from kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/StoryArcRepository.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/comics/repository/StoryArcRepository.java index a74619f..23326fb 100644 --- a/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/StoryArcRepository.java +++ b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/repository/StoryArcRepository.java @@ -1,7 +1,8 @@ -package de.thpeetz.kontor.comics.data; +package de.thpeetz.kontor.comics.repository; import java.util.List; +import de.thpeetz.kontor.comics.data.*; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; diff --git a/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/TradePaperbackRepository.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/repository/TradePaperbackRepository.java similarity index 90% rename from kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/TradePaperbackRepository.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/comics/repository/TradePaperbackRepository.java index fba26ad..d8c5787 100644 --- a/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/TradePaperbackRepository.java +++ b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/repository/TradePaperbackRepository.java @@ -1,7 +1,8 @@ -package de.thpeetz.kontor.comics.data; +package de.thpeetz.kontor.comics.repository; import java.util.List; +import de.thpeetz.kontor.comics.data.*; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; diff --git a/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/VolumeRepository.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/repository/VolumeRepository.java similarity index 74% rename from kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/VolumeRepository.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/comics/repository/VolumeRepository.java index 3b70670..cf98406 100644 --- a/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/VolumeRepository.java +++ b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/repository/VolumeRepository.java @@ -1,7 +1,8 @@ -package de.thpeetz.kontor.comics.data; +package de.thpeetz.kontor.comics.repository; import java.util.List; +import de.thpeetz.kontor.comics.data.*; import org.springframework.data.jpa.repository.JpaRepository; public interface VolumeRepository extends JpaRepository { diff --git a/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/WorktypeRepository.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/repository/WorktypeRepository.java similarity index 86% rename from kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/WorktypeRepository.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/comics/repository/WorktypeRepository.java index 2afebaf..12755c9 100644 --- a/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/WorktypeRepository.java +++ b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/repository/WorktypeRepository.java @@ -1,7 +1,8 @@ -package de.thpeetz.kontor.comics.data; +package de.thpeetz.kontor.comics.repository; import java.util.List; +import de.thpeetz.kontor.comics.data.*; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; diff --git a/kontor-spring/src/main/java/de/thpeetz/kontor/comics/services/ComicService.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/services/ComicService.java index ae4637f..e0a3abe 100644 --- a/kontor-spring/src/main/java/de/thpeetz/kontor/comics/services/ComicService.java +++ b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/services/ComicService.java @@ -2,26 +2,10 @@ package de.thpeetz.kontor.comics.services; import java.util.List; +import de.thpeetz.kontor.comics.data.*; +import de.thpeetz.kontor.comics.repository.*; import org.springframework.stereotype.Service; -import de.thpeetz.kontor.comics.data.Artist; -import de.thpeetz.kontor.comics.data.ArtistRepository; -import de.thpeetz.kontor.comics.data.Comic; -import de.thpeetz.kontor.comics.data.ComicRepository; -import de.thpeetz.kontor.comics.data.ComicWork; -import de.thpeetz.kontor.comics.data.ComicWorkRepository; -import de.thpeetz.kontor.comics.data.Issue; -import de.thpeetz.kontor.comics.data.IssueRepository; -import de.thpeetz.kontor.comics.data.Publisher; -import de.thpeetz.kontor.comics.data.PublisherRepository; -import de.thpeetz.kontor.comics.data.StoryArc; -import de.thpeetz.kontor.comics.data.StoryArcRepository; -import de.thpeetz.kontor.comics.data.TradePaperback; -import de.thpeetz.kontor.comics.data.TradePaperbackRepository; -import de.thpeetz.kontor.comics.data.Volume; -import de.thpeetz.kontor.comics.data.VolumeRepository; -import de.thpeetz.kontor.comics.data.Worktype; -import de.thpeetz.kontor.comics.data.WorktypeRepository; import lombok.extern.slf4j.Slf4j; @Slf4j @@ -35,12 +19,13 @@ public class ComicService { private final StoryArcRepository storyArcRepository; private final TradePaperbackRepository tradePaperbackRepository; private final ComicWorkRepository comicWorkRepository; + private final IssueWorkRepository issueWorkRepository; private final VolumeRepository volumeRepository; private final WorktypeRepository worktypeRepository; public ComicService(PublisherRepository publisherRepository, ComicRepository comicRepository, ArtistRepository artistRepository, IssueRepository issueRepository, StoryArcRepository storyArcRepository, - TradePaperbackRepository tradePaperbackRepository, ComicWorkRepository comicWorkRepository, + TradePaperbackRepository tradePaperbackRepository, ComicWorkRepository comicWorkRepository, IssueWorkRepository issueWorkRepository, VolumeRepository volumeRepository, WorktypeRepository worktypeRepository) { this.publisherRepository = publisherRepository; @@ -50,6 +35,7 @@ public class ComicService { this.storyArcRepository = storyArcRepository; this.tradePaperbackRepository = tradePaperbackRepository; this.comicWorkRepository = comicWorkRepository; + this.issueWorkRepository = issueWorkRepository; this.volumeRepository = volumeRepository; this.worktypeRepository = worktypeRepository; } @@ -231,6 +217,31 @@ public class ComicService { comicWorkRepository.delete(comicWork); } + public List findAllIssueWorks() { + return issueWorkRepository.findAll(); + } + + public void saveIssueWork(IssueWork issueWork) { + if (issueWork == null) { + log.warn("IssueWork is null. Are you sure you have connected your form to the application?"); + return; + } + issueWorkRepository.save(issueWork); + } + + public void deleteIssueWork(IssueWork issueWork) { + Issue issue = issueWork.getIssue(); + issue.getIssueWorks().remove(issueWork); + issueRepository.save(issue); + Artist artist = issueWork.getArtist(); + artist.getIssueWorks().remove(issueWork); + artistRepository.save(artist); + Worktype worktype = issueWork.getWorkType(); + worktype.getIssueWorks().remove(issueWork); + worktypeRepository.save(worktype); + issueWorkRepository.delete(issueWork); + } + public List findAllVolumes() { return volumeRepository.findAll(); } @@ -285,14 +296,23 @@ public class ComicService { public void deleteWorktype(Worktype worktype) { List comicWorks = worktype.getComicWorks(); + List issueWorks = worktype.getIssueWorks(); if (comicWorks == null) { log.warn("reference to ComicWork is null"); - return; + } else { + log.info("found {} references to ComicWork", comicWorks.size()); + comicWorks.forEach(comicWork -> { + comicWork.setWorkType(null); + }); + } + if (issueWorks == null) { + log.warn("reference to ComicWork is null"); + } else { + log.info("found {} references to IssueWork", issueWorks.size()); + issueWorks.forEach(issueWork -> { + issueWork.setWorkType(null); + }); } - log.info("found {} references to ComicWork", comicWorks.size()); - comicWorks.forEach(comicWork -> { - comicWork.setWorkType(null); - }); log.info("delete Worktype: {}", worktype); worktypeRepository.delete(worktype); } diff --git a/kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/IssueForm.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/IssueForm.java index 9f07e19..6627453 100644 --- a/kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/IssueForm.java +++ b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/IssueForm.java @@ -10,14 +10,13 @@ import com.vaadin.flow.component.button.ButtonVariant; import com.vaadin.flow.component.checkbox.Checkbox; import com.vaadin.flow.component.combobox.ComboBox; import com.vaadin.flow.component.formlayout.FormLayout; +import com.vaadin.flow.component.grid.*; import com.vaadin.flow.component.orderedlayout.HorizontalLayout; import com.vaadin.flow.component.textfield.TextField; import com.vaadin.flow.data.binder.BeanValidationBinder; import com.vaadin.flow.data.binder.Binder; -import de.thpeetz.kontor.comics.data.Comic; -import de.thpeetz.kontor.comics.data.Issue; -import de.thpeetz.kontor.comics.data.Volume; +import de.thpeetz.kontor.comics.data.*; import de.thpeetz.kontor.common.views.YearMonthField; import lombok.extern.slf4j.Slf4j; @@ -31,6 +30,7 @@ public class IssueForm extends FormLayout { YearMonthField publishedOn = new YearMonthField(); Checkbox isRead = new Checkbox("Read"); Checkbox inStock = new Checkbox("In stock"); + Grid issueWorks = new Grid<>(IssueWork.class); Button save = new Button("Save"); Button delete = new Button("Delete"); @@ -53,7 +53,11 @@ public class IssueForm extends FormLayout { comic.setItemLabelGenerator(Comic::getTitle); volume.setItems(volumes); volume.setItemLabelGenerator(Volume::getName); - add(comic, volume, issueNumber, title, publishedOn, isRead, inStock, createButtonsLayout()); + issueWorks.setColumns("workType.name", "artist.name"); + issueWorks.getColumnByKey("workType.name").setHeader("Work type"); + issueWorks.getColumnByKey("artist.name").setHeader("Artist"); + issueWorks.getColumns().forEach(col -> col.setAutoWidth(true)); + add(comic, volume, issueNumber, title, publishedOn, isRead, inStock,issueWorks, createButtonsLayout()); } private HorizontalLayout createButtonsLayout() { @@ -96,6 +100,11 @@ public class IssueForm extends FormLayout { } } + public void setIssueWorks(List works) { + log.info("Setting issue works: {}", works); + issueWorks.setItems(works); + } + public abstract static class IssueFormEvent extends ComponentEvent { @lombok.Getter private final Issue issue; diff --git a/kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/IssueView.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/IssueView.java index ea90bf3..bd441b0 100644 --- a/kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/IssueView.java +++ b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/IssueView.java @@ -156,6 +156,12 @@ public class IssueView extends VerticalLayout { closeEditor(); } else { form.setIssue(issue); + if (issue.getIssueWorks() == null) { + log.info("No issue works"); + } else { + log.info("Issue works sze: {}", issue.getIssueWorks().size()); + } + form.setIssueWorks(issue.getIssueWorks()); form.setVisible(true); addClassName("editing"); } diff --git a/kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/IssueWorkForm.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/IssueWorkForm.java new file mode 100644 index 0000000..6f7e88f --- /dev/null +++ b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/IssueWorkForm.java @@ -0,0 +1,113 @@ +package de.thpeetz.kontor.comics.views; + +import java.util.List; + +import com.vaadin.flow.component.ComponentEvent; +import com.vaadin.flow.component.ComponentEventListener; +import com.vaadin.flow.component.Key; +import com.vaadin.flow.component.button.Button; +import com.vaadin.flow.component.button.ButtonVariant; +import com.vaadin.flow.component.combobox.ComboBox; +import com.vaadin.flow.component.formlayout.FormLayout; +import com.vaadin.flow.component.orderedlayout.HorizontalLayout; +import com.vaadin.flow.data.binder.BeanValidationBinder; +import com.vaadin.flow.data.binder.Binder; + +import de.thpeetz.kontor.comics.data.Artist; +import de.thpeetz.kontor.comics.data.Issue; +import de.thpeetz.kontor.comics.data.IssueWork; +import de.thpeetz.kontor.comics.data.Worktype; + +public class IssueWorkForm extends FormLayout { + ComboBox issue = new ComboBox<>("Issue"); + ComboBox artist = new ComboBox<>("Artist"); + ComboBox workType = new ComboBox<>("Worktype"); + + Button save = new Button("Save"); + Button delete = new Button("Delete"); + Button close = new Button("Cancel"); + + Binder binder = new BeanValidationBinder<>(IssueWork.class); + + public IssueWorkForm(List issues, List artists, List workTypes) { + addClassName("issuework-form"); + binder.bindInstanceFields(this); + + issue.setItems(issues); + issue.setItemLabelGenerator(Issue::getIssueNumber); + artist.setItems(artists); + artist.setItemLabelGenerator(Artist::getName); + workType.setItems(workTypes); + workType.setItemLabelGenerator(Worktype::getName); + add(issue, artist, workType, createButtonsLayout()); + } + + private HorizontalLayout createButtonsLayout() { + save.addThemeVariants(ButtonVariant.LUMO_PRIMARY); + delete.addThemeVariants(ButtonVariant.LUMO_ERROR); + close.addThemeVariants(ButtonVariant.LUMO_TERTIARY); + + save.addClickShortcut(Key.ENTER); + close.addClickShortcut(Key.ESCAPE); + + save.addClickListener(event -> validateAndSave()); + delete.addClickListener(event -> fireEvent(new DeleteEvent(this, binder.getBean()))); + close.addClickListener(event -> fireEvent(new CloseEvent(this))); + + binder.addStatusChangeListener(e -> save.setEnabled(binder.isValid())); + return new HorizontalLayout(save, delete, close); + } + + private void validateAndSave() { + if (binder.isValid()) { + fireEvent(new SaveEvent(this, binder.getBean())); + } + } + + public void setIssueWork(IssueWork issueWork) { + binder.setBean(issueWork); + } + + public abstract static class IssueWorkFormEvent extends ComponentEvent { + private IssueWork issueWork; + + protected IssueWorkFormEvent(IssueWorkForm source, IssueWork issueWork) { + super(source, false); + this.issueWork = issueWork; + } + + public IssueWork getIssueWork() { + return issueWork; + } + } + + public static class SaveEvent extends IssueWorkFormEvent { + SaveEvent(IssueWorkForm source, IssueWork issueWork) { + super(source, issueWork); + } + } + + public static class DeleteEvent extends IssueWorkFormEvent { + DeleteEvent(IssueWorkForm source, IssueWork issueWork) { + super(source, issueWork); + } + } + + public static class CloseEvent extends IssueWorkFormEvent { + CloseEvent(IssueWorkForm source) { + super(source, null); + } + } + + public void addDeleteListener(ComponentEventListener listener) { + addListener(DeleteEvent.class, listener); + } + + public void addSaveListener(ComponentEventListener listener) { + addListener(SaveEvent.class, listener); + } + + public void addCloseListener(ComponentEventListener listener) { + addListener(CloseEvent.class, listener); + } +} diff --git a/kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/IssueWorkView.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/IssueWorkView.java new file mode 100644 index 0000000..6e02e52 --- /dev/null +++ b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/IssueWorkView.java @@ -0,0 +1,122 @@ +package de.thpeetz.kontor.comics.views; + +import de.thpeetz.kontor.comics.data.IssueWork; +import org.springframework.context.annotation.Scope; + +import com.vaadin.flow.component.Component; +import com.vaadin.flow.component.button.Button; +import com.vaadin.flow.component.grid.Grid; +import com.vaadin.flow.component.orderedlayout.HorizontalLayout; +import com.vaadin.flow.component.orderedlayout.VerticalLayout; +import com.vaadin.flow.router.PageTitle; +import com.vaadin.flow.router.Route; +import com.vaadin.flow.spring.annotation.SpringComponent; + +import de.thpeetz.kontor.comics.ComicConstants; +import de.thpeetz.kontor.comics.services.ComicService; +import de.thpeetz.kontor.common.views.MainLayout; +import jakarta.annotation.security.PermitAll; + +@SpringComponent +@Scope("prototype") +@PermitAll +@Route(value = ComicConstants.ISSUEWORK_ROUTE, layout = MainLayout.class) +@PageTitle("IssueWork | Comics | Kontor") +public class IssueWorkView extends VerticalLayout { + + Grid grid = new Grid<>(IssueWork.class); + IssueWorkForm form; + ComicService service; + + public IssueWorkView(ComicService service) { + this.service = service; + addClassName("issueWork-view"); + setSizeFull(); + configureGrid(); + configureForm(); + + add(getToolbar(), getContent()); + updateList(); + } + + public Grid getGrid() { + return grid; + } + + private void configureGrid() { + grid.addClassName("issue-grid"); + grid.setSizeFull(); + grid.setColumns("issue.title", "artist.name", "workType.name"); + grid.getColumns().forEach(col -> col.setAutoWidth(true)); + grid.asSingleSelect().addValueChangeListener(event -> editIssueWork(event.getValue())); + } + + public IssueWorkForm getForm() { + return form; + } + + private void configureForm() { + form = new IssueWorkForm(service.findAllIssues(), service.findAllArtists(null), + service.findAllWorktypes(null)); + form.setWidth("25em"); + form.setVisible(false); + form.addSaveListener(this::saveIssueWork); + form.addDeleteListener(this::deleteIssueWork); + form.addCloseListener(e -> closeEditor()); + } + + private void saveIssueWork(IssueWorkForm.SaveEvent event) { + service.saveIssueWork(event.getIssueWork()); + updateList(); + closeEditor(); + } + + private void deleteIssueWork(IssueWorkForm.DeleteEvent event) { + service.deleteIssueWork(event.getIssueWork()); + updateList(); + closeEditor(); + } + + private Component getContent() { + HorizontalLayout content = new HorizontalLayout(grid, form); + content.setFlexGrow(2, grid); + content.setFlexGrow(1, form); + content.addClassName("content"); + content.setSizeFull(); + return content; + } + + private HorizontalLayout getToolbar() { + Button addIssueButton = new Button("Add IssueWork"); + addIssueButton.addClickListener(click -> addIssueWork()); + + HorizontalLayout toolbar = new HorizontalLayout(addIssueButton); + toolbar.addClassName("toolbar"); + return toolbar; + } + + public void editIssueWork(IssueWork issueWork) { + if (issueWork == null) { + closeEditor(); + } else { + form.setIssueWork(issueWork); + form.setVisible(true); + addClassName("editing"); + } + } + + private void closeEditor() { + form.setIssueWork(null); + form.setVisible(false); + removeClassName("editing"); + } + + private void addIssueWork() { + grid.asSingleSelect().clear(); + editIssueWork(new IssueWork()); + } + + public void updateList() { + grid.setItems(service.findAllIssueWorks()); + } +} diff --git a/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/ArtistTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/ArtistTest.java index 855795e..f12c679 100644 --- a/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/ArtistTest.java +++ b/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/ArtistTest.java @@ -4,6 +4,7 @@ import static org.junit.jupiter.api.Assertions.*; import java.util.List; +import de.thpeetz.kontor.comics.repository.*; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; diff --git a/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/ComicTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/ComicTest.java index 5560346..cfc78ca 100644 --- a/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/ComicTest.java +++ b/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/ComicTest.java @@ -4,8 +4,7 @@ import static org.junit.jupiter.api.Assertions.*; import java.util.List; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; +import de.thpeetz.kontor.comics.repository.*; import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestMethodOrder; @@ -13,7 +12,6 @@ import org.junit.jupiter.api.MethodOrderer.OrderAnnotation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.dao.DataIntegrityViolationException; -import org.springframework.orm.jpa.JpaSystemException; import org.springframework.transaction.TransactionSystemException; import de.thpeetz.kontor.comics.TestConstants; diff --git a/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/IssueTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/IssueTest.java index 1760fd1..e600084 100644 --- a/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/IssueTest.java +++ b/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/IssueTest.java @@ -4,6 +4,7 @@ import static org.junit.jupiter.api.Assertions.*; import java.util.List; +import de.thpeetz.kontor.comics.repository.*; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; diff --git a/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/PublisherTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/PublisherTest.java index 264a1d0..028ef5a 100644 --- a/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/PublisherTest.java +++ b/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/PublisherTest.java @@ -2,6 +2,7 @@ package de.thpeetz.kontor.comics.data; import static org.junit.jupiter.api.Assertions.*; +import de.thpeetz.kontor.comics.repository.*; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; diff --git a/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/StoryArcTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/StoryArcTest.java index 07134ca..1e0b598 100644 --- a/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/StoryArcTest.java +++ b/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/StoryArcTest.java @@ -2,8 +2,7 @@ package de.thpeetz.kontor.comics.data; import static org.junit.jupiter.api.Assertions.*; -import java.util.List; - +import de.thpeetz.kontor.comics.repository.*; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; diff --git a/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/TradePaperbackTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/TradePaperbackTest.java index 61df1d6..0c0a11f 100644 --- a/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/TradePaperbackTest.java +++ b/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/TradePaperbackTest.java @@ -2,6 +2,7 @@ package de.thpeetz.kontor.comics.data; import static org.junit.jupiter.api.Assertions.*; +import de.thpeetz.kontor.comics.repository.*; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; diff --git a/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/VolumeTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/VolumeTest.java index 7189965..399d094 100644 --- a/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/VolumeTest.java +++ b/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/VolumeTest.java @@ -2,8 +2,7 @@ package de.thpeetz.kontor.comics.data; import static org.junit.jupiter.api.Assertions.*; -import java.util.List; - +import de.thpeetz.kontor.comics.repository.*; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; diff --git a/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/WorktypeTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/WorktypeTest.java index 3145ee9..050bde9 100644 --- a/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/WorktypeTest.java +++ b/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/WorktypeTest.java @@ -4,6 +4,7 @@ import static org.junit.jupiter.api.Assertions.*; import java.util.List; +import de.thpeetz.kontor.comics.repository.*; import org.junit.jupiter.api.MethodOrderer.OrderAnnotation; import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; @@ -11,7 +12,6 @@ import org.junit.jupiter.api.TestMethodOrder; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.dao.DataIntegrityViolationException; -import org.springframework.orm.jpa.JpaSystemException; import org.springframework.transaction.TransactionSystemException; import de.thpeetz.kontor.comics.TestConstants; diff --git a/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/ArtistRepositoryTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/comics/repository/ArtistRepositoryTest.java similarity index 96% rename from kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/ArtistRepositoryTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/comics/repository/ArtistRepositoryTest.java index 96d53f8..2a3f9e0 100644 --- a/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/ArtistRepositoryTest.java +++ b/kontor-spring/src/test/java/de/thpeetz/kontor/comics/repository/ArtistRepositoryTest.java @@ -1,9 +1,10 @@ -package de.thpeetz.kontor.comics.data; +package de.thpeetz.kontor.comics.repository; import static org.junit.jupiter.api.Assertions.*; import java.util.List; +import de.thpeetz.kontor.comics.data.*; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.MethodOrderer.OrderAnnotation; import org.junit.jupiter.api.Order; diff --git a/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/ComicRepositoryTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/comics/repository/ComicRepositoryTest.java similarity index 95% rename from kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/ComicRepositoryTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/comics/repository/ComicRepositoryTest.java index 70c0d54..9f54868 100644 --- a/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/ComicRepositoryTest.java +++ b/kontor-spring/src/test/java/de/thpeetz/kontor/comics/repository/ComicRepositoryTest.java @@ -1,10 +1,11 @@ -package de.thpeetz.kontor.comics.data; +package de.thpeetz.kontor.comics.repository; import static org.junit.jupiter.api.Assertions.*; import java.util.List; import java.util.stream.Collectors; +import de.thpeetz.kontor.comics.data.*; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; diff --git a/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/ComicWorkRepositoryTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/comics/repository/ComicWorkRepositoryTest.java similarity index 97% rename from kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/ComicWorkRepositoryTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/comics/repository/ComicWorkRepositoryTest.java index 0902b84..a640057 100644 --- a/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/ComicWorkRepositoryTest.java +++ b/kontor-spring/src/test/java/de/thpeetz/kontor/comics/repository/ComicWorkRepositoryTest.java @@ -1,7 +1,8 @@ -package de.thpeetz.kontor.comics.data; +package de.thpeetz.kontor.comics.repository; import static org.junit.jupiter.api.Assertions.*; +import de.thpeetz.kontor.comics.data.*; import org.junit.jupiter.api.MethodOrderer.OrderAnnotation; import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; diff --git a/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/IssueRepositoryTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/comics/repository/IssueRepositoryTest.java similarity index 93% rename from kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/IssueRepositoryTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/comics/repository/IssueRepositoryTest.java index 8d3be93..8235b34 100644 --- a/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/IssueRepositoryTest.java +++ b/kontor-spring/src/test/java/de/thpeetz/kontor/comics/repository/IssueRepositoryTest.java @@ -1,4 +1,4 @@ -package de.thpeetz.kontor.comics.data; +package de.thpeetz.kontor.comics.repository; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; @@ -6,6 +6,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; import java.util.List; +import de.thpeetz.kontor.comics.data.*; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; diff --git a/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/PublisherRepositoryTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/comics/repository/PublisherRepositoryTest.java similarity index 96% rename from kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/PublisherRepositoryTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/comics/repository/PublisherRepositoryTest.java index 50175b4..01dcc8e 100644 --- a/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/PublisherRepositoryTest.java +++ b/kontor-spring/src/test/java/de/thpeetz/kontor/comics/repository/PublisherRepositoryTest.java @@ -1,9 +1,10 @@ -package de.thpeetz.kontor.comics.data; +package de.thpeetz.kontor.comics.repository; import static org.junit.jupiter.api.Assertions.*; import java.util.List; +import de.thpeetz.kontor.comics.data.*; import org.junit.jupiter.api.MethodOrderer.OrderAnnotation; import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; diff --git a/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/StoryArcRepositoryTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/comics/repository/StoryArcRepositoryTest.java similarity index 93% rename from kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/StoryArcRepositoryTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/comics/repository/StoryArcRepositoryTest.java index 52bad7e..367faba 100644 --- a/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/StoryArcRepositoryTest.java +++ b/kontor-spring/src/test/java/de/thpeetz/kontor/comics/repository/StoryArcRepositoryTest.java @@ -1,9 +1,10 @@ -package de.thpeetz.kontor.comics.data; +package de.thpeetz.kontor.comics.repository; import static org.junit.jupiter.api.Assertions.*; import java.util.List; +import de.thpeetz.kontor.comics.data.*; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; diff --git a/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/TradePaperbackRepositoryTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/comics/repository/TradePaperbackRepositoryTest.java similarity index 96% rename from kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/TradePaperbackRepositoryTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/comics/repository/TradePaperbackRepositoryTest.java index 2c66c12..4f9dade 100644 --- a/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/TradePaperbackRepositoryTest.java +++ b/kontor-spring/src/test/java/de/thpeetz/kontor/comics/repository/TradePaperbackRepositoryTest.java @@ -1,4 +1,4 @@ -package de.thpeetz.kontor.comics.data; +package de.thpeetz.kontor.comics.repository; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; @@ -6,6 +6,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.List; +import de.thpeetz.kontor.comics.data.*; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; diff --git a/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/VolumeRepositoryTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/comics/repository/VolumeRepositoryTest.java similarity index 95% rename from kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/VolumeRepositoryTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/comics/repository/VolumeRepositoryTest.java index ce04a11..33a699a 100644 --- a/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/VolumeRepositoryTest.java +++ b/kontor-spring/src/test/java/de/thpeetz/kontor/comics/repository/VolumeRepositoryTest.java @@ -1,9 +1,10 @@ -package de.thpeetz.kontor.comics.data; +package de.thpeetz.kontor.comics.repository; import static org.junit.jupiter.api.Assertions.*; import java.util.List; +import de.thpeetz.kontor.comics.data.*; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; diff --git a/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/WorktypeRepositoryTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/comics/repository/WorktypeRepositoryTest.java similarity index 81% rename from kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/WorktypeRepositoryTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/comics/repository/WorktypeRepositoryTest.java index 5dae5e8..d9b641e 100644 --- a/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/WorktypeRepositoryTest.java +++ b/kontor-spring/src/test/java/de/thpeetz/kontor/comics/repository/WorktypeRepositoryTest.java @@ -1,20 +1,15 @@ -package de.thpeetz.kontor.comics.data; +package de.thpeetz.kontor.comics.repository; import static org.junit.jupiter.api.Assertions.*; import java.util.List; import java.util.stream.Collectors; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.MethodOrderer.OrderAnnotation; -import org.junit.jupiter.api.Order; +import de.thpeetz.kontor.comics.data.*; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.TestMethodOrder; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import de.thpeetz.kontor.comics.TestConstants; - @SpringBootTest class WorktypeRepositoryTest {