Skip to content

Commit

Permalink
[Issue #226] Attach the reading lists to each comic returned in an up…
Browse files Browse the repository at this point in the history
…date.
  • Loading branch information
mcpierce committed Jun 21, 2020
1 parent bcdda4f commit 7564c08
Show file tree
Hide file tree
Showing 8 changed files with 135 additions and 54 deletions.
108 changes: 66 additions & 42 deletions comixed-library/src/main/java/org/comixed/model/comic/Comic.java
Expand Up @@ -31,8 +31,8 @@
import org.apache.commons.io.FilenameUtils;
import org.comixed.adaptors.ArchiveType;
import org.comixed.adaptors.archive.ArchiveAdaptor;
import org.comixed.model.library.ReadingList;
import org.comixed.views.View;
import org.comixed.views.View.*;
import org.hibernate.annotations.Formula;
import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;
Expand All @@ -55,41 +55,41 @@ public class Comic {
@GeneratedValue(strategy = GenerationType.IDENTITY)
@JsonProperty("id")
@JsonView({
ComicList.class,
DeletedComicList.class,
PageList.class,
DuplicatePageList.class,
DatabaseBackup.class,
View.ComicList.class,
View.DeletedComicList.class,
View.PageList.class,
View.DuplicatePageList.class,
View.DatabaseBackup.class,
View.ReadingList.class
})
private Long id;

@Enumerated(EnumType.STRING)
@JsonProperty("archiveType")
@JsonView({ComicList.class, DatabaseBackup.class})
@JsonView({View.ComicList.class, View.DatabaseBackup.class})
ArchiveType archiveType;

@ManyToOne
@JoinColumn(name = "scan_type_id")
@JsonProperty("scanType")
@JsonView({ComicList.class, PageList.class, DatabaseBackup.class})
@JsonView({View.ComicList.class, View.PageList.class, View.DatabaseBackup.class})
private ScanType scanType;

@ManyToOne
@JoinColumn(name = "format_id")
@JsonProperty("format")
@JsonView({ComicList.class, PageList.class, DatabaseBackup.class})
@JsonView({View.ComicList.class, View.PageList.class, View.DatabaseBackup.class})
private ComicFormat format;

@Column(name = "filename", nullable = false, unique = true, length = 1024)
@JsonProperty("filename")
@JsonView({ComicList.class, PageList.class, DatabaseBackup.class})
@JsonView({View.ComicList.class, View.PageList.class, View.DatabaseBackup.class})
private String filename;

@Transient @JsonIgnore File backingFile;

@OneToOne(cascade = CascadeType.ALL, mappedBy = "comic", orphanRemoval = true)
@JsonView({ComicList.class, ComicDetails.class})
@JsonView({View.ComicList.class, View.ComicDetails.class})
private ComicFileDetails fileDetails;

@Formula(value = "(SELECT COUNT(*) FROM pages p WHERE p.comic_id = id)")
Expand All @@ -104,100 +104,115 @@ public class Comic {
@Column(name = "added_date", updatable = false, nullable = false)
@JsonProperty("addedDate")
@JsonFormat(shape = JsonFormat.Shape.NUMBER)
@JsonView({ComicList.class, DatabaseBackup.class})
@JsonView({View.ComicList.class, View.DatabaseBackup.class})
@Temporal(TemporalType.TIMESTAMP)
private Date dateAdded = new Date();

@Column(name = "deleted_date", updatable = true, nullable = true)
@JsonProperty("deletedDate")
@JsonFormat(shape = Shape.NUMBER)
@JsonView({ComicList.class, DatabaseBackup.class})
@JsonView({View.ComicList.class, View.DatabaseBackup.class})
@Temporal(TemporalType.TIMESTAMP)
private Date dateDeleted;

@Column(name = "last_updated_date", updatable = true, nullable = false)
@JsonProperty("lastUpdatedDate")
@JsonFormat(shape = JsonFormat.Shape.NUMBER)
@JsonView({ComicList.class, DatabaseBackup.class})
@JsonView({View.ComicList.class, View.DatabaseBackup.class})
@Temporal(TemporalType.TIMESTAMP)
private Date dateLastUpdated = new Date();

@Column(name = "publisher", length = 128)
@JsonProperty("publisher")
@JsonView({ComicList.class, DuplicatePageList.class, DatabaseBackup.class})
@JsonView({View.ComicList.class, View.DuplicatePageList.class, View.DatabaseBackup.class})
private String publisher;

@Column(name = "series", length = 128)
@JsonProperty("series")
@JsonView({ComicList.class, PageList.class, DuplicatePageList.class, DatabaseBackup.class})
@JsonView({
View.ComicList.class,
View.PageList.class,
View.DuplicatePageList.class,
View.DatabaseBackup.class
})
private String series;

@Column(name = "volume", length = 4)
@JsonProperty("volume")
@JsonView({ComicList.class, PageList.class, DuplicatePageList.class, DatabaseBackup.class})
@JsonView({
View.ComicList.class,
View.PageList.class,
View.DuplicatePageList.class,
View.DatabaseBackup.class
})
private String volume;

@Column(name = "issue_number", length = 16)
@JsonProperty("issueNumber")
@JsonView({ComicList.class, PageList.class, DuplicatePageList.class, DatabaseBackup.class})
@JsonView({
View.ComicList.class,
View.PageList.class,
View.DuplicatePageList.class,
View.DatabaseBackup.class
})
private String issueNumber;

@Column(name = "imprint")
@JsonProperty("imprint")
@JsonView({ComicList.class, DatabaseBackup.class})
@JsonView({View.ComicList.class, View.DatabaseBackup.class})
private String imprint;

@Column(name = "comic_vine_id", length = 16)
@JsonProperty("comicVineId")
@JsonView({ComicList.class, DatabaseBackup.class})
@JsonView({View.ComicList.class, View.DatabaseBackup.class})
private String comicVineId;

@Column(name = "cover_date", nullable = true)
@Temporal(TemporalType.DATE)
@JsonProperty("coverDate")
@JsonView({ComicList.class, DatabaseBackup.class})
@JsonView({View.ComicList.class, View.DatabaseBackup.class})
private Date coverDate;

@Column(name = "title", length = 128)
@JsonProperty("title")
@JsonView({ComicList.class, DatabaseBackup.class})
@JsonView({View.ComicList.class, View.DatabaseBackup.class})
private String title;

@Column(name = "sort_name", length = 128)
@JsonProperty("sortName")
@JsonView({ComicList.class, DatabaseBackup.class})
@JsonView({View.ComicList.class, View.DatabaseBackup.class})
private String sortName;

@ElementCollection
@LazyCollection(LazyCollectionOption.FALSE)
@CollectionTable(name = "comic_characters", joinColumns = @JoinColumn(name = "comic_id"))
@Column(name = "character_name")
@JsonProperty("characters")
@JsonView({ComicList.class, DatabaseBackup.class})
@JsonView({View.ComicList.class, View.DatabaseBackup.class})
private List<String> characters = new ArrayList<>();

@ElementCollection
@LazyCollection(LazyCollectionOption.FALSE)
@CollectionTable(name = "comic_teams", joinColumns = @JoinColumn(name = "comic_id"))
@Column(name = "team_name")
@JsonProperty("teams")
@JsonView({ComicList.class, DatabaseBackup.class})
@JsonView({View.ComicList.class, View.DatabaseBackup.class})
private List<String> teams = new ArrayList<>();

@ElementCollection
@LazyCollection(LazyCollectionOption.FALSE)
@CollectionTable(name = "comic_locations", joinColumns = @JoinColumn(name = "comic_id"))
@Column(name = "location_name")
@JsonProperty("locations")
@JsonView({ComicList.class, DatabaseBackup.class})
@JsonView({View.ComicList.class, View.DatabaseBackup.class})
private List<String> locations = new ArrayList<>();

@ElementCollection
@LazyCollection(LazyCollectionOption.FALSE)
@CollectionTable(name = "comic_story_arcs", joinColumns = @JoinColumn(name = "comic_id"))
@Column(name = "story_name")
@JsonProperty("storyArcs")
@JsonView({ComicList.class, DatabaseBackup.class})
@JsonView({View.ComicList.class, View.DatabaseBackup.class})
List<String> storyArcs = new ArrayList<>();

@OneToMany(
Expand All @@ -206,63 +221,68 @@ public class Comic {
fetch = FetchType.EAGER,
orphanRemoval = true)
@JsonProperty("credits")
@JsonView({ComicList.class, DatabaseBackup.class})
@JsonView({View.ComicList.class, View.DatabaseBackup.class})
private Set<Credit> credits = new HashSet<>();

@Transient
@JsonProperty("nextIssueId")
@JsonView({ComicDetails.class})
@JsonView({View.ComicDetails.class})
private Long nextIssueId;

@Transient
@JsonProperty("previousIssueId")
@JsonView({ComicDetails.class})
@JsonView({View.ComicDetails.class})
private Long previousIssueId;

@Formula(
value =
"(SELECT COUNT(*) FROM pages p WHERE p.comic_id = id AND p.hash in (SELECT d.hash FROM blocked_page_hashes d))")
@JsonProperty("blockedPageCount")
@JsonView({ComicList.class})
@JsonView(View.ComicList.class)
private int blockedPageCount;

@OneToMany(mappedBy = "comic", cascade = CascadeType.ALL, orphanRemoval = true)
@OrderColumn(name = "page_number")
@JsonProperty("pages")
@JsonView({
ComicDetails.class,
View.ComicDetails.class,
})
List<Page> pages = new ArrayList<>();

@Transient
@JsonProperty("comicVineURL")
@JsonView({ComicDetails.class, DatabaseBackup.class})
@JsonView({View.ComicDetails.class, View.DatabaseBackup.class})
private String comicVineURL;

@Column(name = "description")
@Lob
@JsonProperty("description")
@JsonView({ComicDetails.class, DatabaseBackup.class})
@JsonView({View.ComicDetails.class, View.DatabaseBackup.class})
private String description;

@Column(name = "notes")
@Lob
@JsonProperty("notes")
@JsonView({ComicDetails.class, DatabaseBackup.class})
@JsonView({View.ComicDetails.class, View.DatabaseBackup.class})
private String notes;

@Column(name = "summary")
@Lob
@JsonProperty("summary")
@JsonView({ComicDetails.class, DatabaseBackup.class})
@JsonView({View.ComicDetails.class, View.DatabaseBackup.class})
private String summary;

@Formula(
"(SELECT COUNT(*) FROM comics c WHERE c.series = series AND c.volume = volume AND C.issue_number = issue_number)")
@JsonProperty("duplicateCount")
@JsonView({ComicList.class})
@JsonView(View.ComicList.class)
private Integer duplicateCount;

@Transient
@JsonProperty("readingLists")
@JsonView(View.ComicList.class)
private List<ReadingList> readingLists = new ArrayList<>();

public Date getDateLastUpdated() {
return dateLastUpdated;
}
Expand Down Expand Up @@ -406,7 +426,7 @@ public ArchiveAdaptor getArchiveAdaptor() {
* @return the filename
*/
@JsonProperty("baseFilename")
@JsonView(ComicList.class)
@JsonView(View.ComicList.class)
public String getBaseFilename() {
return FilenameUtils.getName(this.filename);
}
Expand Down Expand Up @@ -504,7 +524,7 @@ public Page getCover() {
* @return <code>true</code> if the file is missing
*/
@JsonProperty("missing")
@JsonView(ComicList.class)
@JsonView(View.ComicList.class)
public boolean isMissing() {
if (this.backingFile == null) {
this.backingFile = new File(this.filename);
Expand Down Expand Up @@ -577,7 +597,7 @@ public void setDateDeleted(final Date dateDeleted) {
*/
@Transient
@JsonProperty("deletedPageCount")
@JsonView(ComicList.class)
@JsonView(View.ComicList.class)
public int getDeletedPageCount() {
return this.calculatedDeletedPageCount;
}
Expand Down Expand Up @@ -664,7 +684,7 @@ public int getIndexFor(Page page) {

@Transient
@JsonProperty("sortableIssueNumber")
@JsonView(ComicList.class)
@JsonView(View.ComicList.class)
public String getSortableIssueNumber() {
final String result = "00000" + (this.issueNumber != null ? this.issueNumber : "");

Expand Down Expand Up @@ -762,7 +782,7 @@ public Page getPage(int index) {
*/
@Transient
@JsonProperty("pageCount")
@JsonView(ComicList.class)
@JsonView(View.ComicList.class)
public int getPageCount() {
if (!this.pages.isEmpty()) return this.pages.size();
if (this.calculatedPageCount != null) return this.calculatedPageCount.intValue();
Expand Down Expand Up @@ -1071,4 +1091,8 @@ public File getFile() {
public Integer getDuplicateCount() {
return (this.duplicateCount != null) ? (this.duplicateCount - 1) : 0;
}

public List<ReadingList> getReadingLists() {
return this.readingLists;
}
}
Expand Up @@ -18,6 +18,7 @@

package org.comixed.model.library;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonView;
import java.util.Date;
Expand All @@ -41,34 +42,34 @@ public class ReadingList {
cascade = CascadeType.ALL,
fetch = FetchType.EAGER,
orphanRemoval = true)
@JsonView(View.ReadingList.class)
Set<ReadingListEntry> entries = new HashSet<>();

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@JsonProperty("id")
@JsonView(View.ReadingList.class)
@JsonView(View.ComicList.class)
private Long id;

@Column(name = "name", length = 128)
@JsonProperty("name")
@JsonView(View.ReadingList.class)
@JsonView(View.ComicList.class)
private String name;

@Column(name = "summary", length = 256, nullable = true)
@JsonProperty("summary")
@JsonView(View.ReadingList.class)
@JsonView(View.ComicList.class)
private String summary;

@JsonProperty("owner")
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "owner_id")
@JsonView(View.ReadingList.class)
@JsonView(View.ComicList.class)
private ComiXedUser owner;

@Column(name = "created")
@JsonProperty("created_date")
@JsonView(View.ReadingList.class)
@JsonProperty("createdDate")
@JsonView(View.ComicList.class)
@JsonFormat(shape = JsonFormat.Shape.NUMBER)
private Date created = new Date();

public Long getId() {
Expand Down

0 comments on commit 7564c08

Please sign in to comment.