From d4dbfa58e97b5af2ea00e71ca60bc4ab7f0721af Mon Sep 17 00:00:00 2001 From: Thomas Peetz Date: Tue, 30 Dec 2025 03:08:14 +0100 Subject: [PATCH] add models for kontor-javalin --- kontor-javalin/build.gradle | 10 ++ kontor-javalin/gradle/libs.versions.toml | 15 +- .../thpeetz/kontor/models/comics/Artist.java | 52 +++++++ .../thpeetz/kontor/models/comics/Comic.java | 95 +++++++++++++ .../kontor/models/comics/ComicWork.java | 56 ++++++++ .../thpeetz/kontor/models/comics/Issue.java | 131 ++++++++++++++++++ .../kontor/models/comics/IssueWork.java | 56 ++++++++ .../kontor/models/comics/Publisher.java | 79 +++++++++++ .../kontor/models/comics/StoryArc.java | 61 ++++++++ .../kontor/models/comics/TradePaperback.java | 48 +++++++ .../thpeetz/kontor/models/comics/Volume.java | 70 ++++++++++ .../kontor/models/comics/Worktype.java | 53 +++++++ .../de/thpeetz/kontor/comics/data/Artist.java | 1 - .../de/thpeetz/kontor/comics/data/Volume.java | 1 - .../thpeetz/kontor/comics/data/Worktype.java | 1 - 15 files changed, 725 insertions(+), 4 deletions(-) create mode 100644 kontor-javalin/src/main/java/de/thpeetz/kontor/models/comics/Artist.java create mode 100644 kontor-javalin/src/main/java/de/thpeetz/kontor/models/comics/Comic.java create mode 100644 kontor-javalin/src/main/java/de/thpeetz/kontor/models/comics/ComicWork.java create mode 100644 kontor-javalin/src/main/java/de/thpeetz/kontor/models/comics/Issue.java create mode 100644 kontor-javalin/src/main/java/de/thpeetz/kontor/models/comics/IssueWork.java create mode 100644 kontor-javalin/src/main/java/de/thpeetz/kontor/models/comics/Publisher.java create mode 100644 kontor-javalin/src/main/java/de/thpeetz/kontor/models/comics/StoryArc.java create mode 100644 kontor-javalin/src/main/java/de/thpeetz/kontor/models/comics/TradePaperback.java create mode 100644 kontor-javalin/src/main/java/de/thpeetz/kontor/models/comics/Volume.java create mode 100644 kontor-javalin/src/main/java/de/thpeetz/kontor/models/comics/Worktype.java diff --git a/kontor-javalin/build.gradle b/kontor-javalin/build.gradle index 468a464..453cdb2 100644 --- a/kontor-javalin/build.gradle +++ b/kontor-javalin/build.gradle @@ -10,6 +10,16 @@ dependencies { implementation libs.javalin // Pulling in Javalin implementation libs.jackson // For JSON serialization of persons implementation libs.slf4j // To see some Javalin logging + compileOnly libs.lombok + annotationProcessor libs.lombok + + implementation libs.postgresql + implementation libs.hibernate + implementation libs.hibernate.validator + implementation libs.validation.api + annotationProcessor libs.hibernate.jpamodelgen + testImplementation(platform(libs.junit.bom)) + testImplementation "org.junit.jupiter:junit-jupiter" } task fatJar(type: Jar) { diff --git a/kontor-javalin/gradle/libs.versions.toml b/kontor-javalin/gradle/libs.versions.toml index 4488442..3976e65 100644 --- a/kontor-javalin/gradle/libs.versions.toml +++ b/kontor-javalin/gradle/libs.versions.toml @@ -1,6 +1,7 @@ [versions] gradle = "8.6" -junit = "5.8.2" +#junit = "5.8.2" +junit = "5.10.3" #slf4j = "1.7.36" slf4j = "2.0.16" hsqldb = "2.7.1" @@ -8,11 +9,23 @@ sqlite = "3.25.2" jackson = "2.16.1" #javalin = "4.6.4" javalin = "6.7.0" +lombok = "1.18.34" +postgresql = "42.7.3" +hibernate = "7.0.5.Final" +validation = "2.0.1.Final" [libraries] junit = { module = "org.junit.jupiter:junit-jupiter", version.ref = "junit" } +junit-bom = { module = "org.junit:junit-bom", version.ref = "junit" } slf4j = { module = "org.slf4j:slf4j-simple", version.ref = "slf4j" } hsqldb = { module = "org.hsqldb:hsqldb", version.ref = "hsqldb" } jackson = { module = "com.fasterxml.jackson.core:jackson-databind", version.ref = "jackson" } sqlite-jdbc = { module = "org.xerial:sqlite-jdbc", version.ref = "sqlite" } javalin = { module = "io.javalin:javalin", version.ref = "javalin" } +javalin-bundle = { module = "io.javalin:javalin-bundle", version.ref = "javalin" } +lombok = { module = "org.projectlombok:lombok", version.ref = "lombok" } +postgresql = { module = "org.postgresql:postgresql", version.ref = "postgresql" } +hibernate = { module = "org.hibernate.orm:hibernate-core", version.ref = "hibernate" } +hibernate-jpamodelgen = { module = "org.hibernate.orm:hibernate-jpamodelgen", version.ref = "hibernate" } +hibernate-validator = { module = "org.hibernate:hibernate-validator", version.ref = "hibernate" } +validation-api = { module = "javax.validation:validation-api", version.ref = "validation" } diff --git a/kontor-javalin/src/main/java/de/thpeetz/kontor/models/comics/Artist.java b/kontor-javalin/src/main/java/de/thpeetz/kontor/models/comics/Artist.java new file mode 100644 index 0000000..cf81f94 --- /dev/null +++ b/kontor-javalin/src/main/java/de/thpeetz/kontor/models/comics/Artist.java @@ -0,0 +1,52 @@ +package de.thpeetz.kontor.models.comics; + +import java.util.Date; +import java.util.LinkedList; +import java.util.List; + +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.OneToMany; +import jakarta.persistence.Table; +import jakarta.persistence.Version; +import lombok.Getter; +import lombok.Setter; + +@Entity +@Table +@Getter +@Setter +public class Artist { + + @Id + @GeneratedValue(strategy = GenerationType.UUID) + private String id; + + @Version + private int version; + + @Column(name = "created_date") + private Date createdDate; + + @Column(name = "last_modified_date") + private Date lastModifiedDate; + + @Column(unique = true, nullable = false) + private String name; + + @Column(nullable = true) + private String weblink; + + @Column(nullable = true) + @OneToMany(fetch = FetchType.EAGER, mappedBy = "artist", cascade = CascadeType.REFRESH, orphanRemoval = true) + List comicWorks = new LinkedList<>(); + + @Column(nullable = true) + @OneToMany(fetch = FetchType.EAGER, mappedBy = "artist", cascade = CascadeType.REFRESH, orphanRemoval = true) + List issueWorks = new LinkedList<>(); +} diff --git a/kontor-javalin/src/main/java/de/thpeetz/kontor/models/comics/Comic.java b/kontor-javalin/src/main/java/de/thpeetz/kontor/models/comics/Comic.java new file mode 100644 index 0000000..d6348ed --- /dev/null +++ b/kontor-javalin/src/main/java/de/thpeetz/kontor/models/comics/Comic.java @@ -0,0 +1,95 @@ +package de.thpeetz.kontor.models.comics; + +import java.util.Date; +import java.util.LinkedList; +import java.util.List; + +import org.checkerframework.checker.units.qual.Volume; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.OneToMany; +import jakarta.persistence.Table; +import jakarta.persistence.Version; +import lombok.Getter; +import lombok.Setter; + +@Entity +@Table +@Getter +@Setter +public class Comic { + + @Id + @GeneratedValue(strategy = GenerationType.UUID) + private String id; + + @Version + private int version; + + @Column(name = "created_date") + private Date createdDate; + + @Column(name = "last_modified_date") + private Date lastModifiedDate; + + @Column(unique = true, nullable = false) + private String title; + + @Column(nullable = false) + @ManyToOne + @JoinColumn(name = "publisher_id") + @JsonIgnoreProperties({ "comics" }) + private Publisher publisher; + + private Boolean currentOrder = false; + + private Boolean completed = false; + + @Column(nullable = true) + private String weblink; + + @Column(nullable = true) + @OneToMany(fetch = FetchType.EAGER, mappedBy = "comic", cascade = CascadeType.REFRESH, orphanRemoval = true) + List comicWorks; + + @Column(nullable = true) + @OneToMany(fetch = FetchType.EAGER, mappedBy = "comic", cascade = CascadeType.REFRESH, orphanRemoval = true) + private List issues = new LinkedList<>(); + + @Column(nullable = true) + @OneToMany(fetch = FetchType.EAGER, mappedBy = "comic", cascade = CascadeType.REFRESH, orphanRemoval = true) + private List storyArcs = new LinkedList<>(); + + @Column(nullable = true) + @OneToMany(fetch = FetchType.EAGER, mappedBy = "comic", cascade = CascadeType.REFRESH, orphanRemoval = true) + private List tradePaperbacks = new LinkedList<>(); + + @Column(nullable = true) + @OneToMany(fetch = FetchType.EAGER, mappedBy = "comic", cascade = CascadeType.REFRESH, orphanRemoval = true) + private List volumes = new LinkedList<>(); + + @Override + public String toString() { + final StringBuffer sb = new StringBuffer("Comic{"); + sb.append("title='").append(title).append('\''); + sb.append(", publisher=").append(publisher); + sb.append(", currentOrder=").append(currentOrder); + sb.append(", completed=").append(completed); + sb.append('}'); + return sb.toString(); + } + + public String getPublisherName() { + return this.publisher.getName(); + } +} diff --git a/kontor-javalin/src/main/java/de/thpeetz/kontor/models/comics/ComicWork.java b/kontor-javalin/src/main/java/de/thpeetz/kontor/models/comics/ComicWork.java new file mode 100644 index 0000000..9f163d3 --- /dev/null +++ b/kontor-javalin/src/main/java/de/thpeetz/kontor/models/comics/ComicWork.java @@ -0,0 +1,56 @@ +package de.thpeetz.kontor.models.comics; + +import java.util.Date; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; +import jakarta.persistence.Version; + +@Entity +@Table +public class ComicWork { + + @Id + @GeneratedValue(strategy = GenerationType.UUID) + private String id; + + @Version + private int version; + + @Column(name = "created_date") + private Date createdDate; + + @Column(name = "last_modified_date") + private Date lastModifiedDate; + + @Column(nullable = false) + @ManyToOne + @JoinColumn(name = "comic_id") + private Comic comic; + + @Column(nullable = false) + @ManyToOne + @JoinColumn(name = "artist_id") + private Artist artist; + + @Column(nullable = false) + @ManyToOne + @JoinColumn(name = "workType_id") + private Worktype workType; + + @Override + public String toString() { + final StringBuilder sb = new StringBuilder("ComicWork{"); + sb.append("comic=").append(comic); + sb.append(", artist=").append(artist); + sb.append(", workType=").append(workType); + sb.append('}'); + return sb.toString(); + } +} diff --git a/kontor-javalin/src/main/java/de/thpeetz/kontor/models/comics/Issue.java b/kontor-javalin/src/main/java/de/thpeetz/kontor/models/comics/Issue.java new file mode 100644 index 0000000..7c79cca --- /dev/null +++ b/kontor-javalin/src/main/java/de/thpeetz/kontor/models/comics/Issue.java @@ -0,0 +1,131 @@ +package de.thpeetz.kontor.models.comics; + +import java.time.YearMonth; +import java.util.Date; +import java.util.List; + +import org.checkerframework.checker.units.qual.Volume; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.OneToMany; +import jakarta.persistence.Table; +import jakarta.persistence.Version; +import lombok.Getter; +import lombok.Setter; + +import org.hibernate.annotations.Type; + +@Entity +@Table +@Getter +@Setter +public class Issue { + + @Id + @GeneratedValue(strategy = GenerationType.UUID) + private String id; + + @Version + private int version; + + @Column(name = "created_date") + private Date createdDate; + + @Column(name = "last_modified_date") + private Date lastModifiedDate; + + @Column(nullable = false) + @ManyToOne + @JoinColumn(name = "comic_id") + @JsonIgnoreProperties({ "issues" }) + private Comic comic; + + @Column(nullable = true) + @ManyToOne + @JoinColumn(name = "volume_id") + @JsonIgnoreProperties({ "issues" }) + private Volume volume; + + @Column(nullable = true) + @ManyToOne + @JoinColumn(name = "storyArc_id") + @JsonIgnoreProperties({ "issues" }) + private StoryArc storyArc; + + @Column(nullable = false) + private String issueNumber; + + @Column(nullable = true) + private String title; + + @Type(YearMonthDateType.class) + @Column(name = "published_on", columnDefinition = "date", nullable = true) + private YearMonth publishedOn; + + @Column + private Boolean isRead; + + @Column + private Boolean inStock; + + @Column(nullable = true) + @OneToMany(fetch = FetchType.EAGER, mappedBy = "issue", cascade = CascadeType.REFRESH, orphanRemoval = true) + List issueWorks; + + public String getComicTitle() { + return comic.getTitle(); + } + + public String getVolumeName() { + if (volume != null) { + return volume.getName(); + } + return null; + } + + public String getFullTitle() { + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append(this.getComic().getTitle()); + stringBuilder.append(" #"); + stringBuilder.append(this.getIssueNumber()); + if (this.title !=null && !this.title.isEmpty()) { + stringBuilder.append(": "); + stringBuilder.append(this.title); + } + return stringBuilder.toString(); + } + + @Override + public String toString() { + StringBuilder result = new StringBuilder(); + result.append("Issue{"); + result.append("comic="); + result.append(comic); + result.append(", volume="); + result.append(volume); + result.append(", storyArc="); + result.append(storyArc); + result.append(", issueNumber='"); + result.append(issueNumber); + result.append(", title='"); + result.append(title); + result.append(", publishedOn="); + result.append(publishedOn); + result.append(", isRead="); + result.append(isRead); + result.append(", inStock="); + result.append(inStock); + result.append("}"); + return result.toString(); + } +} diff --git a/kontor-javalin/src/main/java/de/thpeetz/kontor/models/comics/IssueWork.java b/kontor-javalin/src/main/java/de/thpeetz/kontor/models/comics/IssueWork.java new file mode 100644 index 0000000..0b33e6c --- /dev/null +++ b/kontor-javalin/src/main/java/de/thpeetz/kontor/models/comics/IssueWork.java @@ -0,0 +1,56 @@ +package de.thpeetz.kontor.models.comics; + +import java.util.Date; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; +import jakarta.persistence.Version; + +@Entity +@Table +public class IssueWork { + + @Id + @GeneratedValue(strategy = GenerationType.UUID) + private String id; + + @Version + private int version; + + @Column(name = "created_date") + private Date createdDate; + + @Column(name = "last_modified_date") + private Date lastModifiedDate; + + @Column(nullable = false) + @ManyToOne + @JoinColumn(name = "issue_id") + private Issue issue; + + @Column(nullable = false) + @ManyToOne + @JoinColumn(name = "artist_id") + private Artist artist; + + @Column(nullable = false) + @ManyToOne + @JoinColumn(name = "workType_id") + 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-javalin/src/main/java/de/thpeetz/kontor/models/comics/Publisher.java b/kontor-javalin/src/main/java/de/thpeetz/kontor/models/comics/Publisher.java new file mode 100644 index 0000000..58b5fea --- /dev/null +++ b/kontor-javalin/src/main/java/de/thpeetz/kontor/models/comics/Publisher.java @@ -0,0 +1,79 @@ +package de.thpeetz.kontor.models.comics; + +import java.util.Date; +import java.util.LinkedList; +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonBackReference; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.OneToMany; +import jakarta.persistence.Table; +import jakarta.persistence.Version; +import lombok.Getter; +import lombok.Setter; + +@Entity +@Table +@Getter +@Setter +public class Publisher { + + @Id + @GeneratedValue(strategy = GenerationType.UUID) + private String id; + + @Version + private int version; + + @Column(name = "created_date") + private Date createdDate; + + @Column(name = "last_modified_date") + private Date lastModifiedDate; + + @Column(unique = true, nullable = false) + private String name; + + @Column + private String weblink; + + @Column(nullable = true) + @JsonBackReference + @ManyToOne + @JoinColumn(name = "parent_publisher_id") + @JsonIgnoreProperties({ "comics" }) + private Publisher parentCompany; + + @Column(nullable = true) + @OneToMany(fetch = FetchType.LAZY, mappedBy = "parentCompany", cascade = CascadeType.ALL, orphanRemoval = true) + private List imprints = new LinkedList<>(); + + @Column(nullable = true) + @OneToMany(fetch = FetchType.EAGER, mappedBy = "publisher", cascade = CascadeType.ALL, orphanRemoval = true) + private List comics = new LinkedList<>(); + + public String getParentCompanyName() { + if (parentCompany != null) { + return parentCompany.name; + } + return null; + } + + @Override + public String toString() { + final StringBuffer sb = new StringBuffer("Publisher{"); + sb.append("name='").append(name).append('\''); + sb.append('}'); + return sb.toString(); + } +} diff --git a/kontor-javalin/src/main/java/de/thpeetz/kontor/models/comics/StoryArc.java b/kontor-javalin/src/main/java/de/thpeetz/kontor/models/comics/StoryArc.java new file mode 100644 index 0000000..3f6604f --- /dev/null +++ b/kontor-javalin/src/main/java/de/thpeetz/kontor/models/comics/StoryArc.java @@ -0,0 +1,61 @@ +package de.thpeetz.kontor.models.comics; + +import java.util.Date; +import java.util.LinkedList; +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.OneToMany; +import jakarta.persistence.Table; +import jakarta.persistence.Version; +import lombok.Getter; +import lombok.Setter; + +@Entity +@Table +@Getter +@Setter +public class StoryArc { + + @Id + @GeneratedValue(strategy = GenerationType.UUID) + private String id; + + @Version + private int version; + + @Column(name = "created_date") + private Date createdDate; + + @Column(name = "last_modified_date") + private Date lastModifiedDate; + + @Column(nullable = false) + private String name; + + @Column(nullable = false) + @ManyToOne + @JoinColumn(name = "comic_id") + @JsonIgnoreProperties({ "storyArcs" }) + private Comic comic; + + @Column(nullable = true) + @ManyToOne + @JoinColumn(name = "volume_id") + @JsonIgnoreProperties({ "storyArcs" }) + private Volume volume; + + @Column(nullable = true) + @OneToMany(fetch = FetchType.EAGER, mappedBy = "storyArc", cascade = CascadeType.REMOVE, orphanRemoval = true) + private List issues = new LinkedList<>(); +} diff --git a/kontor-javalin/src/main/java/de/thpeetz/kontor/models/comics/TradePaperback.java b/kontor-javalin/src/main/java/de/thpeetz/kontor/models/comics/TradePaperback.java new file mode 100644 index 0000000..ddd1952 --- /dev/null +++ b/kontor-javalin/src/main/java/de/thpeetz/kontor/models/comics/TradePaperback.java @@ -0,0 +1,48 @@ +package de.thpeetz.kontor.models.comics; + +import java.util.Date; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; +import jakarta.persistence.Version; +import lombok.Getter; +import lombok.Setter; + +@Entity +@Table +@Getter +@Setter +public class TradePaperback { + + @Id + @GeneratedValue(strategy = GenerationType.UUID) + private String id; + + @Version + private int version; + + @Column(name = "created_date") + private Date createdDate; + + @Column(name = "last_modified_date") + private Date lastModifiedDate; + + @Column(nullable = false) + private String name; + + @Column(nullable = false) + @ManyToOne + @JoinColumn(name = "comic_id") + private Comic comic; + + @Column + private Integer issueStart; + + @Column + private Integer issueEnd;} diff --git a/kontor-javalin/src/main/java/de/thpeetz/kontor/models/comics/Volume.java b/kontor-javalin/src/main/java/de/thpeetz/kontor/models/comics/Volume.java new file mode 100644 index 0000000..0682445 --- /dev/null +++ b/kontor-javalin/src/main/java/de/thpeetz/kontor/models/comics/Volume.java @@ -0,0 +1,70 @@ +package de.thpeetz.kontor.models.comics; + +import java.util.Date; +import java.util.LinkedList; +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.OneToMany; +import jakarta.persistence.Table; +import jakarta.persistence.Version; +import lombok.Getter; +import lombok.Setter; + +@Entity +@Table +@Getter +@Setter +public class Volume { + + @Id + @GeneratedValue(strategy = GenerationType.UUID) + private String id; + + @Version + private int version; + + @Column(name = "created_date") + private Date createdDate; + + @Column(name = "last_modified_date") + private Date lastModifiedDate; + + @Column(nullable = false) + private String name; + + @Column(nullable = false) + @ManyToOne + @JoinColumn(name = "comic_id") + @JsonIgnoreProperties({ "volumes" }) + private Comic comic; + + @Column(nullable = true) + @OneToMany(fetch = FetchType.EAGER, mappedBy = "volume", cascade = CascadeType.REMOVE, orphanRemoval = true) + private List storyArcs = new LinkedList<>(); + + @Column(nullable = true) + @OneToMany(fetch = FetchType.EAGER, mappedBy = "volume", cascade = CascadeType.REMOVE, orphanRemoval = true) + private List issues = new LinkedList<>(); + + @Override + public String toString() { + StringBuilder result = new StringBuilder("Volume{"); + result.append("name="); + result.append(name); + result.append("comic=Comic{title="); + result.append(comic.getTitle()); + result.append("}}"); + return result.toString(); + } +} diff --git a/kontor-javalin/src/main/java/de/thpeetz/kontor/models/comics/Worktype.java b/kontor-javalin/src/main/java/de/thpeetz/kontor/models/comics/Worktype.java new file mode 100644 index 0000000..10cf902 --- /dev/null +++ b/kontor-javalin/src/main/java/de/thpeetz/kontor/models/comics/Worktype.java @@ -0,0 +1,53 @@ +package de.thpeetz.kontor.models.comics; + +import java.util.Date; +import java.util.LinkedList; +import java.util.List; + +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.OneToMany; +import jakarta.persistence.Table; +import jakarta.persistence.Version; + +@Entity +@Table +public class Worktype { + + @Id + @GeneratedValue(strategy = GenerationType.UUID) + private String id; + + @Version + private int version; + + @Column(name = "created_date") + private Date createdDate; + + @Column(name = "last_modified_date") + private Date lastModifiedDate; + + @Column(unique = true, nullable = false) + private String name; + + @Column(nullable = true) + @OneToMany(fetch = FetchType.EAGER, mappedBy = "workType", cascade = CascadeType.REFRESH, orphanRemoval = true) + List comicWorks = new LinkedList<>(); + + @Column(nullable = true) + @OneToMany(fetch = FetchType.EAGER, mappedBy = "workType", cascade = CascadeType.REFRESH, orphanRemoval = true) + List issueWorks = new LinkedList<>(); + + @Override + public String toString() { + final StringBuffer sb = new StringBuffer("Worktype{"); + sb.append("name='").append(name).append('\''); + sb.append('}'); + return sb.toString(); + } +} 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 d7bda7f..8e14329 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 @@ -14,7 +14,6 @@ import jakarta.validation.constraints.NotEmpty; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.Setter; -import lombok.ToString; import lombok.extern.slf4j.Slf4j; /** diff --git a/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/Volume.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/Volume.java index 27116e4..60c3821 100644 --- a/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/Volume.java +++ b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/Volume.java @@ -18,7 +18,6 @@ import jakarta.validation.constraints.NotNull; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.Setter; -import lombok.ToString; @Getter @Setter 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 294ecc2..0416641 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 @@ -14,7 +14,6 @@ import jakarta.validation.constraints.NotEmpty; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.Setter; -import lombok.ToString; /** * Represents a work type in the application.