diff --git a/src/main/java/org/ntlab/citrusserver/repositories/PublicBookManager.java b/src/main/java/org/ntlab/citrusserver/repositories/PublicBookManager.java index e8a7d17..bfd3b7a 100644 --- a/src/main/java/org/ntlab/citrusserver/repositories/PublicBookManager.java +++ b/src/main/java/org/ntlab/citrusserver/repositories/PublicBookManager.java @@ -13,8 +13,11 @@ private final HashMap> publicBooks = new HashMap<>(); - public PublicBookManager(BookManager bookManager) { + private final FavoriteManager favoriteManager; + + public PublicBookManager(BookManager bookManager, FavoriteManager favoriteManager) { bookManager.addListener(this); + this.favoriteManager = favoriteManager; } public ArrayList getAllPublicBooks(){ @@ -30,6 +33,17 @@ ArrayList books = getAllPublicBooks(); books.sort(Comparator.comparing(Book::getTime).reversed()); return books; + } else if(sortBy == 1){ + ArrayList books = new ArrayList<>(); + for(Book book : getAllPublicBooks()){ + books.add(new BookForSort(book, favoriteManager.getFavorited(book.getAccountId(), book.getBookId()).size())); + } + books.sort(Comparator.comparing(BookForSort::favoriteNum)); + ArrayList res = new ArrayList<>(); + for(BookForSort book : books){ + res.add(book.book()); + } + return res; } return null; } @@ -53,6 +67,18 @@ ArrayList result = searchBooksByTitle(title); result.sort(Comparator.comparing(Book::getTime).reversed()); return result; + }else if(sortBy == 1){ + ArrayList books = new ArrayList<>(); + for(Book book : searchBooksByTitle(title)){ + books.add(new BookForSort(book, favoriteManager.getFavorited(book.getAccountId(), book.getBookId()).size())); + } + books.sort(Comparator.comparing(BookForSort::favoriteNum)); + ArrayList res = new ArrayList<>(); + for(BookForSort book : books){ + res.add(book.book()); + } + return res; + } return null; } @@ -74,6 +100,17 @@ ArrayList result = searchBooksByAccount(accountId); result.sort(Comparator.comparing(Book::getTime).reversed()); return result; + } else if(sortBy == 1){ + ArrayList books = new ArrayList<>(); + for(Book book : searchBooksByAccount(accountId)){ + books.add(new BookForSort(book, favoriteManager.getFavorited(book.getAccountId(), book.getBookId()).size())); + } + books.sort(Comparator.comparing(BookForSort::favoriteNum)); + ArrayList res = new ArrayList<>(); + for(BookForSort book : books){ + res.add(book.book()); + } + return res; } return null; } @@ -94,6 +131,17 @@ ArrayList result = searchBooksByTitleAndAccount(title, accountId); result.sort(Comparator.comparing(Book::getTime).reversed()); return result; + } else if(sortBy == 1){ + ArrayList books = new ArrayList<>(); + for(Book book : searchBooksByTitleAndAccount(title, accountId)){ + books.add(new BookForSort(book, favoriteManager.getFavorited(book.getAccountId(), book.getBookId()).size())); + } + books.sort(Comparator.comparing(BookForSort::favoriteNum)); + ArrayList res = new ArrayList<>(); + for(BookForSort book : books){ + res.add(book.book()); + } + return res; } return null; } @@ -117,3 +165,6 @@ } } + +record BookForSort(Book book, Integer favoriteNum) { +}