Skip to content

Commit

Permalink
[Issue #267] Child objects of a comic are deleted.
Browse files Browse the repository at this point in the history
  • Loading branch information
mcpierce committed Jun 21, 2020
1 parent 19944c7 commit 846cc11
Show file tree
Hide file tree
Showing 10 changed files with 94 additions and 177 deletions.
64 changes: 36 additions & 28 deletions comixed-library/src/main/java/org/comixed/model/comic/Comic.java
Expand Up @@ -32,6 +32,8 @@
import org.comixed.adaptors.ArchiveType;
import org.comixed.adaptors.archive.ArchiveAdaptor;
import org.comixed.model.library.ReadingList;
import org.comixed.model.tasks.Task;
import org.comixed.model.user.LastReadDate;
import org.comixed.views.View;
import org.hibernate.annotations.Formula;
import org.hibernate.annotations.LazyCollection;
Expand All @@ -51,6 +53,29 @@
@Table(name = "comics")
@Log4j2
public class Comic {
@Enumerated(EnumType.STRING)
@JsonProperty("archiveType")
@JsonView({View.ComicList.class, View.DatabaseBackup.class})
ArchiveType archiveType;

@Transient @JsonIgnore File backingFile;

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

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

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@JsonProperty("id")
Expand All @@ -64,11 +89,6 @@ public class Comic {
})
private Long id;

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

@ManyToOne
@JoinColumn(name = "scan_type_id")
@JsonProperty("scanType")
Expand All @@ -86,8 +106,6 @@ public class Comic {
@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({View.ComicList.class, View.ComicDetails.class})
private ComicFileDetails fileDetails;
Expand Down Expand Up @@ -207,14 +225,6 @@ public class Comic {
@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({View.ComicList.class, View.DatabaseBackup.class})
List<String> storyArcs = new ArrayList<>();

@OneToMany(
mappedBy = "comic",
cascade = CascadeType.ALL,
Expand All @@ -241,14 +251,6 @@ public class Comic {
@JsonView(View.ComicList.class)
private int blockedPageCount;

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

@Transient
@JsonProperty("comicVineURL")
@JsonView({View.ComicDetails.class, View.DatabaseBackup.class})
Expand Down Expand Up @@ -278,11 +280,17 @@ public class Comic {
@JsonView(View.ComicList.class)
private Integer duplicateCount;

@Transient
@ManyToMany(mappedBy = "comics", cascade = CascadeType.ALL)
@JsonProperty("readingLists")
@JsonView(View.ComicList.class)
private List<ReadingList> readingLists = new ArrayList<>();

@OneToMany(mappedBy = "comic", cascade = CascadeType.REMOVE, orphanRemoval = true)
private List<Task> tasks = new ArrayList<>();

@OneToMany(mappedBy = "comic", cascade = CascadeType.REMOVE, orphanRemoval = true)
private List<LastReadDate> lastReadDates = new ArrayList<>();

public Date getDateLastUpdated() {
return dateLastUpdated;
}
Expand Down Expand Up @@ -667,6 +675,10 @@ public Long getId() {
return this.id;
}

public void setId(final long id) {
this.id = id;
}

public String getImprint() {
return this.imprint;
}
Expand Down Expand Up @@ -1070,10 +1082,6 @@ public void setPreviousIssueId(final Long previousIssueId) {
this.previousIssueId = previousIssueId;
}

public void setId(final long id) {
this.id = id;
}

public ComicFileDetails getFileDetails() {
return fileDetails;
}
Expand Down
Expand Up @@ -21,10 +21,11 @@
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonView;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import java.util.List;
import javax.persistence.*;
import org.comixed.model.comic.Comic;
import org.comixed.model.user.ComiXedUser;
import org.comixed.views.View;

Expand All @@ -36,14 +37,6 @@
@Entity
@Table(name = "reading_lists")
public class ReadingList {
@JsonProperty("entries")
@OneToMany(
mappedBy = "readingList",
cascade = CascadeType.ALL,
fetch = FetchType.EAGER,
orphanRemoval = true)
Set<ReadingListEntry> entries = new HashSet<>();

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@JsonProperty("id")
Expand Down Expand Up @@ -72,6 +65,13 @@ public class ReadingList {
@JsonFormat(shape = JsonFormat.Shape.NUMBER)
private Date lastUpdated = new Date();

@ManyToMany
@JoinTable(
name = "reading_list_entries",
joinColumns = {@JoinColumn(name = "reading_list_id")},
inverseJoinColumns = {@JoinColumn(name = "comic_id")})
private List<Comic> comics = new ArrayList<>();

public Long getId() {
return this.id;
}
Expand All @@ -92,10 +92,6 @@ public void setOwner(ComiXedUser owner) {
this.owner = owner;
}

public Set<ReadingListEntry> getEntries() {
return this.entries;
}

public String getSummary() {
return summary;
}
Expand All @@ -111,4 +107,8 @@ public Date getLastUpdated() {
public void setLastUpdated(Date lastUpdated) {
this.lastUpdated = lastUpdated;
}

public List<Comic> getComics() {
return comics;
}
}

This file was deleted.

Expand Up @@ -34,10 +34,14 @@ public interface ReadingListRepository extends CrudRepository<ReadingList, Long>
List<ReadingList> getAllReadingListsForOwnerUpdatedAfter(
@Param("owner") ComiXedUser owner, @Param("lastUpdated") Date lastUpdated);

@Query("SELECT list FROM ReadingList list WHERE list.owner = :owner AND list.name = :listName")
@Query(
"SELECT l FROM ReadingList l JOIN FETCH l.comics WHERE l.owner = :owner AND l.name = :listName")
ReadingList findReadingListForUser(ComiXedUser owner, String listName);

@Query(
"SELECT l FROM ReadingList l WHERE l.owner.email = :email AND l IN (SELECT e.readingList FROM ReadingListEntry e WHERE e.comic = :comic)")
"SELECT l FROM ReadingList l JOIN FETCH l.comics WHERE l.owner.email = :email AND :comic MEMBER OF l.comics")
List<ReadingList> findByOwnerAndComic(@Param("email") String email, @Param("comic") Comic comic);

@Query("SELECT l FROM ReadingList l JOIN FETCH l.comics WHERE l.id = :id")
ReadingList getById(@Param("id") Long id);
}
Expand Up @@ -558,4 +558,13 @@ public void testComicWithoutDuplicates() {

fail("Did not find the expected comic");
}

@Test
public void testDelete() {
repository.delete(comic);

Comic result = repository.getById(TEST_COMIC_ID);

assertNull(result);
}
}
Expand Up @@ -27,7 +27,6 @@
import java.util.Optional;
import org.comixed.model.comic.Comic;
import org.comixed.model.library.ReadingList;
import org.comixed.model.library.ReadingListEntry;
import org.comixed.model.user.ComiXedUser;
import org.comixed.repositories.ComiXedUserRepository;
import org.comixed.repositories.RepositoryContext;
Expand Down Expand Up @@ -108,10 +107,7 @@ public void testFindReadingListForUser() {

assertNotNull(result);
assertEquals(TEST_EXISTING_LIST_NAME, result.getName());
assertEquals(5, result.getEntries().size());
for (ReadingListEntry entry : result.getEntries()) {
assertEquals(result.getId(), entry.getReadingList().getId());
}
assertEquals(5, result.getComics().size());
}

@Test
Expand All @@ -120,31 +116,31 @@ public void testCreateReadingList() {

list.setOwner(reader);
list.setName(TEST_NEW_LIST_NAME);
list.getEntries().add(new ReadingListEntry(comic1, list));
list.getEntries().add(new ReadingListEntry(comic2, list));
list.getComics().add(comic1);
list.getComics().add(comic2);
repository.save(list);

ReadingList result = repository.findReadingListForUser(reader, TEST_NEW_LIST_NAME);

assertNotNull(result);
assertEquals(reader.getId(), result.getOwner().getId());
assertEquals(list.getEntries().size(), result.getEntries().size());
assertEquals(list.getComics().size(), result.getComics().size());
}

@Test
public void testUpdateReadingList() {
ReadingList list = repository.findById(1000L).get();
Comic comic = comicRepository.findById(1002L).get();
ReadingList list = repository.getById(1000L);
Comic comic = comicRepository.getById(1002L);

list.getEntries().add(new ReadingListEntry(comic, list));
list.getComics().add(comic);
repository.save(list);

ReadingList result = repository.findById(list.getId()).get();
ReadingList result = repository.getById(list.getId());

assertEquals(list.getEntries().size(), result.getEntries().size());
assertEquals(list.getComics().size(), result.getComics().size());
boolean found = false;
for (ReadingListEntry entry : result.getEntries()) {
found |= (entry.getComic().getId().longValue() == comic.getId().longValue());
for (Comic entry : result.getComics()) {
found |= (entry.getId().longValue() == comic.getId().longValue());
}
assertTrue(found);
}
Expand Down

0 comments on commit 846cc11

Please sign in to comment.