Skip to content

Commit

Permalink
Changed the next/previous issue query to use the cover date [#329]
Browse files Browse the repository at this point in the history
  • Loading branch information
mcpierce committed Jun 21, 2020
1 parent 097b611 commit 9332096
Show file tree
Hide file tree
Showing 5 changed files with 48 additions and 13 deletions.
Expand Up @@ -88,14 +88,14 @@ List<Comic> getLibraryUpdates(
Comic getById(@Param("id") long id);

@Query(
"SELECT c FROM Comic c WHERE c.series = :series and c.volume = :volume AND c.issueNumber < :issueNumber ORDER BY c.issueNumber DESC")
"SELECT c FROM Comic c WHERE c.series = :series AND c.volume = :volume AND c.issueNumber <> :issueNumber AND c.coverDate <= (SELECT DISTINCT d.coverDate FROM Comic d WHERE d.series = :series AND d.volume = :volume AND d.issueNumber = :issueNumber) ORDER BY c.issueNumber,c.coverDate DESC")
List<Comic> findIssuesBeforeComic(
@Param("series") String series,
@Param("volume") String volume,
@Param("issueNumber") String issueNumber);

@Query(
"SELECT c FROM Comic c WHERE c.series = :series and c.volume = :volume AND c.issueNumber > :issueNumber ORDER BY c.issueNumber ASC")
"SELECT c FROM Comic c WHERE c.series = :series AND c.volume = :volume AND c.issueNumber <> :issueNumber AND c.coverDate >= (SELECT DISTINCT d.coverDate FROM Comic d WHERE d.series = :series AND d.volume = :volume AND d.issueNumber = :issueNumber) ORDER BY c.issueNumber,c.coverDate ASC")
List<Comic> findIssuesAfterComic(
@Param("series") String series,
@Param("volume") String volume,
Expand Down
Expand Up @@ -494,7 +494,6 @@ public void testGetIssuesAfterComic() {
this.repository.findIssuesAfterComic(TEST_SERIES, TEST_VOLUME, TEST_ISSUE_WITH_NEXT);

assertFalse(result.isEmpty());
assertEquals(TEST_NEXT_ISSUE_ID, result.get(0).getId());
for (int index = 0; index < result.size(); index++) {
assertTrue(result.get(index).getIssueNumber().compareTo(TEST_ISSUE_WITH_NEXT) > 0);
}
Expand All @@ -514,7 +513,6 @@ public void testGetIssuesBeforeComic() {
this.repository.findIssuesBeforeComic(TEST_SERIES, TEST_VOLUME, TEST_ISSUE_WITH_PREV);

assertFalse(result.isEmpty());
assertEquals(TEST_PREV_ISSUE_ID, result.get(0).getId());
for (int index = 0; index < result.size(); index++) {
assertTrue(result.get(index).getIssueNumber().compareTo(TEST_ISSUE_WITH_PREV) < 0);
}
Expand Down
10 changes: 5 additions & 5 deletions comixed-library/src/test/resources/test-database.xml
Expand Up @@ -63,7 +63,7 @@
COMIC_VINE_ID="ABCDEFG"
added_date="2017-06-15 15:20:00"
last_updated_date="2020-01-09 06:27:00"
cover_date="2017-02-31"
cover_date="2017-02-28"
volume="2017"
issue_number="513"
description="This is a comic book's description"
Expand Down Expand Up @@ -105,7 +105,7 @@
COMIC_VINE_ID="ABCDEFG"
added_date="2017-06-15 15:20:00"
last_updated_date="2020-01-09 06:27:11"
cover_date="2017-02-31"
cover_date="2017-03-31"
volume="2017"
issue_number="514"
description="This is a comic book's description"
Expand All @@ -119,7 +119,7 @@
COMIC_VINE_ID="ABCDEFG"
added_date="2017-06-15 15:20:10"
last_updated_date="2020-01-09 06:27:02"
cover_date="2017-02-31"
cover_date="2016-02-28"
volume="2017"
issue_number="250"
description="This is a comic book's description"
Expand All @@ -133,7 +133,7 @@
COMIC_VINE_ID="ABCDEFG"
added_date="2017-06-15 15:20:20"
last_updated_date="2020-01-09 06:27:30"
cover_date="2017-02-31"
cover_date="2015-02-28"
volume="2017"
issue_number="249"
description="This is a comic book's description"
Expand All @@ -147,7 +147,7 @@
COMIC_VINE_ID="ABCDEFG"
added_date="2017-06-15 15:20:20"
last_updated_date="2020-01-09 06:27:30"
cover_date="2017-02-31"
cover_date="2015-02-28"
deleted_date="2020-03-23"
volume="2017"
issue_number="249"
Expand Down
Expand Up @@ -241,15 +241,49 @@ public Comic getComic(final long id) throws ComicException {
this.comicRepository.findIssuesAfterComic(
result.getSeries(), result.getVolume(), result.getIssueNumber());
if (!next.isEmpty()) {
this.log.debug("Setting the next comic: id={}", next.get(0).getId());
result.setNextIssueId(next.get(0).getId());
int index = 0;
Comic nextComic = null;
while (nextComic == null && index < next.size()) {
Comic candidate = next.get(index);
if ((candidate.getCoverDate().compareTo(result.getCoverDate()) >= 0)
&& (candidate.getSortableIssueNumber().compareTo(result.getSortableIssueNumber())
> 0)) {
this.log.debug("Found next issue: id={}", candidate.getId());
nextComic = candidate;
} else {
index++;
}
}
if (nextComic != null) {
this.log.debug("Setting the next comic: id={}", nextComic.getId());
result.setNextIssueId(nextComic.getId());
} else {
this.log.debug("Did not find a next issue");
}
}
final List<Comic> prev =
this.comicRepository.findIssuesBeforeComic(
result.getSeries(), result.getVolume(), result.getIssueNumber());
if (!prev.isEmpty()) {
this.log.debug("Setting previous comic: id={}", prev.get(0).getId());
result.setPreviousIssueId(prev.get(0).getId());
int index = prev.size() - 1;
Comic prevComic = null;
while (prevComic == null && index >= 0) {
Comic candidate = prev.get(index);
if ((candidate.getCoverDate().compareTo(result.getCoverDate()) <= 0)
&& (candidate.getSortableIssueNumber().compareTo(result.getSortableIssueNumber())
< 0)) {
this.log.debug("Found previous issue: id={}", candidate.getId());
prevComic = candidate;
} else {
index--;
}
}
if (prevComic != null) {
this.log.debug("Setting previous comic: id={}", prevComic.getId());
result.setPreviousIssueId(prevComic.getId());
} else {
this.log.debug("Did not find a previous issue");
}
}

this.log.debug("Returning comic: id={}", result.getId());
Expand Down
Expand Up @@ -104,12 +104,15 @@ public class ComicServiceTest {
public void setUp() {
previousComic.setIssueNumber(TEST_PREVIOUS_ISSUE_NUMBER);
previousComic.setId(TEST_PREVIOUS_COMIC_ID);
previousComic.setCoverDate(new Date(System.currentTimeMillis() - 24 * 60 * 60 * 1000));
currentComic.setSeries(TEST_SERIES);
currentComic.setVolume(TEST_VOLUME);
currentComic.setIssueNumber(TEST_CURRENT_ISSUE_NUMBER);
currentComic.setId(TEST_CURRENT_COMIC_ID);
currentComic.setCoverDate(new Date(System.currentTimeMillis()));
nextComic.setIssueNumber(TEST_NEXT_ISSUE_NUMBER);
nextComic.setId(TEST_NEXT_COMIC_ID);
nextComic.setCoverDate(new Date(System.currentTimeMillis() + 24 * 60 * 60 * 1000));
comicsBySeries.add(nextComic);
comicsBySeries.add(previousComic);
comicsBySeries.add(currentComic);
Expand Down

0 comments on commit 9332096

Please sign in to comment.