Skip to content

Commit 3ea901a

Browse files
committed
Added sorting duplicate pages by comic count [#2338]
1 parent 944ecff commit 3ea901a

File tree

9 files changed

+34
-28
lines changed

9 files changed

+34
-28
lines changed

comixed-model/src/main/java/org/comixedproject/model/net/library/DuplicatePageUpdate.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public class DuplicatePageUpdate {
4040

4141
@JsonProperty("total")
4242
@Getter
43-
private int total;
43+
private long total;
4444

4545
@JsonProperty("page")
4646
@JsonView(View.DuplicatePageList.class)

comixed-model/src/main/java/org/comixedproject/model/net/library/LoadDuplicatePageListResponse.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,13 @@
3434
*/
3535
@AllArgsConstructor
3636
public class LoadDuplicatePageListResponse {
37-
@JsonProperty("total")
37+
@JsonProperty("pages")
3838
@JsonView(View.DuplicatePageList.class)
3939
@Getter
40-
private int total;
40+
private List<DuplicatePage> pages;
4141

42-
@JsonProperty("pages")
42+
@JsonProperty("total")
4343
@JsonView(View.DuplicatePageList.class)
4444
@Getter
45-
private List<DuplicatePage> pages;
45+
private long total;
4646
}

comixed-repositories/src/main/java/org/comixedproject/repositories/comicpages/ComicPageRepository.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ public interface ComicPageRepository extends JpaRepository<ComicPage, Long> {
6565

6666
@Query(
6767
"SELECT COUNT(DISTINCT p.hash) FROM ComicPage p WHERE p.hash in (SELECT d.hash FROM ComicPage d GROUP BY d.hash HAVING COUNT(*) > 1)")
68-
int getDuplicatePageCount();
68+
long getDuplicatePageCount();
6969

7070
/**
7171
* Returns the list of pages that have the given hash and state flag value.

comixed-rest/src/main/java/org/comixedproject/rest/library/DuplicatePageController.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,9 @@ public LoadDuplicatePageListResponse getDuplicatePageList(
7070
size,
7171
sortBy,
7272
sortDirection);
73-
return this.duplicatePageService.getDuplicatePages(page, size, sortBy, sortDirection);
73+
return new LoadDuplicatePageListResponse(
74+
this.duplicatePageService.getDuplicatePages(page, size, sortBy, sortDirection),
75+
this.duplicatePageService.getDuplicatePageCount());
7476
}
7577

7678
/**

comixed-rest/src/test/java/org/comixedproject/rest/library/DuplicatePageControllerTest.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@
1818

1919
package org.comixedproject.rest.library;
2020

21-
import static junit.framework.TestCase.assertNotNull;
22-
import static junit.framework.TestCase.assertSame;
21+
import static junit.framework.TestCase.*;
2322

23+
import java.util.List;
2424
import org.comixedproject.model.library.DuplicatePage;
2525
import org.comixedproject.model.net.library.LoadDuplicatePageListRequest;
2626
import org.comixedproject.model.net.library.LoadDuplicatePageListResponse;
@@ -40,26 +40,31 @@ public class DuplicatePageControllerTest {
4040
private static final int TEST_PAGE_SIZE = 25;
4141
private static final String TEST_SORT_BY = "hash";
4242
private static final String TEST_SORT_DIRECTION = "desc";
43+
private static final long TEST_DUPLICATE_PAGE_COUNT = 238L;
4344

4445
@InjectMocks private DuplicatePageController controller;
4546
@Mock private DuplicatePageService duplicatePageService;
4647
@Mock private DuplicatePage duplicatePage;
48+
@Mock private List<DuplicatePage> duplicatePageList;
4749
@Mock private LoadDuplicatePageListResponse duplicatePageListResponse;
4850

4951
@Test
5052
public void testGetDuplicatePageList() {
5153
Mockito.when(
5254
duplicatePageService.getDuplicatePages(
5355
Mockito.anyInt(), Mockito.anyInt(), Mockito.anyString(), Mockito.anyString()))
54-
.thenReturn(duplicatePageListResponse);
56+
.thenReturn(duplicatePageList);
57+
Mockito.when(duplicatePageService.getDuplicatePageCount())
58+
.thenReturn(TEST_DUPLICATE_PAGE_COUNT);
5559

5660
final LoadDuplicatePageListResponse result =
5761
controller.getDuplicatePageList(
5862
new LoadDuplicatePageListRequest(
5963
TEST_PAGE_NUMBER, TEST_PAGE_SIZE, TEST_SORT_BY, TEST_SORT_DIRECTION));
6064

6165
assertNotNull(result);
62-
assertSame(duplicatePageListResponse, result);
66+
assertSame(duplicatePageList, result.getPages());
67+
assertEquals(TEST_DUPLICATE_PAGE_COUNT, result.getTotal());
6368

6469
Mockito.verify(duplicatePageService, Mockito.times(1))
6570
.getDuplicatePages(TEST_PAGE_NUMBER, TEST_PAGE_SIZE, TEST_SORT_BY, TEST_SORT_DIRECTION);

comixed-services/src/main/java/org/comixedproject/service/library/DuplicatePageService.java

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import lombok.extern.log4j.Log4j2;
2323
import org.comixedproject.model.comicpages.ComicPage;
2424
import org.comixedproject.model.library.DuplicatePage;
25-
import org.comixedproject.model.net.library.LoadDuplicatePageListResponse;
2625
import org.comixedproject.repositories.comicpages.ComicPageRepository;
2726
import org.springframework.beans.factory.annotation.Autowired;
2827
import org.springframework.data.domain.PageRequest;
@@ -46,21 +45,23 @@ public class DuplicatePageService {
4645
/**
4746
* Retrieves the list of all duplicate pages in the library.
4847
*
49-
* @return the duplicate pages
48+
* @return the duplicate page list
5049
*/
5150
@Transactional(isolation = Isolation.READ_UNCOMMITTED)
52-
public LoadDuplicatePageListResponse getDuplicatePages(
51+
public List<DuplicatePage> getDuplicatePages(
5352
final int page, final int size, final String sortBy, final String sortDirection) {
5453
log.trace("Getting pages from repository");
55-
final List<DuplicatePage> pages =
56-
this.comicPageRepository.getDuplicatePages(
57-
PageRequest.of(page, size, this.doCreateSort(sortBy, sortDirection)));
58-
log.trace("Returning duplicate page list");
59-
return new LoadDuplicatePageListResponse(this.getDuplicatePageCount(), pages);
54+
return this.comicPageRepository.getDuplicatePages(
55+
PageRequest.of(page, size, this.doCreateSort(sortBy, sortDirection)));
6056
}
6157

58+
/**
59+
* Retrieves the number of duplicate pages in the library.
60+
*
61+
* @return the page count
62+
*/
6263
@Transactional
63-
public int getDuplicatePageCount() {
64+
public long getDuplicatePageCount() {
6465
log.debug("Loading duplicate page count");
6566
return this.comicPageRepository.getDuplicatePageCount();
6667
}
@@ -73,6 +74,7 @@ private Sort doCreateSort(final String sortBy, final String sortDirection) {
7374
String fieldName;
7475
switch (sortBy) {
7576
case "hash" -> fieldName = "hash";
77+
case "comic-count" -> fieldName = "comicCount";
7678
default -> fieldName = "hash";
7779
}
7880

comixed-services/src/test/java/org/comixedproject/service/comicpages/BlockedHashServiceTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ public class BlockedHashServiceTest {
7575
private static final byte[] TEST_PAGE_CONTENT = "This is the page content".getBytes();
7676
private static final String TEST_ENCODED_PAGE = "This is the encoded page.";
7777
private static final byte[] TEST_DECODED_PAGE = "This is the decoded page".getBytes();
78-
private static final int TEST_TOTAL_DUPLICATE_PAGES = 320;
78+
private static final long TEST_TOTAL_DUPLICATE_PAGES = 320L;
7979

8080
@InjectMocks private BlockedHashService service;
8181
@Mock private DuplicatePageService duplicatePageService;

comixed-services/src/test/java/org/comixedproject/service/library/DuplicatePageServiceTest.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import org.comixedproject.model.comicbooks.ComicDetail;
1111
import org.comixedproject.model.comicpages.ComicPage;
1212
import org.comixedproject.model.library.DuplicatePage;
13-
import org.comixedproject.model.net.library.LoadDuplicatePageListResponse;
1413
import org.comixedproject.repositories.comicpages.ComicPageRepository;
1514
import org.junit.Before;
1615
import org.junit.Test;
@@ -42,7 +41,6 @@ public class DuplicatePageServiceTest {
4241

4342
@Before
4443
public void setUp() {
45-
Mockito.when(duplicatePage.getHash()).thenReturn(TEST_PAGE_HASH);
4644
Mockito.when(comicBook.getComicDetail()).thenReturn(comicDetail);
4745
Mockito.when(comicPage.getComicBook()).thenReturn(comicBook);
4846
}
@@ -55,13 +53,12 @@ public void testGetDuplicatePages() {
5553
Mockito.when(comicPageRepository.getDuplicatePages(pageRequestArgumentCaptor.capture()))
5654
.thenReturn(duplicatePageList);
5755

58-
LoadDuplicatePageListResponse result =
56+
List<DuplicatePage> result =
5957
service.getDuplicatePages(
6058
TEST_PAGE_NUMBER, TEST_PAGE_SIZE, TEST_SORT_BY, TEST_SORT_DIRECTION);
6159

6260
assertNotNull(result);
63-
assertFalse(result.getPages().isEmpty());
64-
assertEquals(TEST_PAGE_HASH, result.getPages().get(0).getHash());
61+
assertFalse(result.isEmpty());
6562

6663
final PageRequest pageRequest = pageRequestArgumentCaptor.getValue();
6764
assertEquals(TEST_PAGE_NUMBER, pageRequest.getPageNumber());

comixed-webui/src/app/library/pages/duplicate-page-list-page/duplicate-page-list-page.component.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ <h2>
134134
</ng-container>
135135

136136
<ng-container matColumnDef="hash">
137-
<mat-header-cell mat-sort-header mat-sort-header *matHeaderCellDef>
137+
<mat-header-cell mat-sort-header *matHeaderCellDef>
138138
{{ "duplicate-pages.header.hash" | translate }}
139139
</mat-header-cell>
140140
<mat-cell *matCellDef="let row">
@@ -143,7 +143,7 @@ <h2>
143143
</ng-container>
144144

145145
<ng-container matColumnDef="comic-count">
146-
<mat-header-cell *matHeaderCellDef>
146+
<mat-header-cell mat-sort-header *matHeaderCellDef>
147147
{{ "duplicate-pages.header.comic-count" | translate }}
148148
</mat-header-cell>
149149
<mat-cell *matCellDef="let row">

0 commit comments

Comments
 (0)