From bf3046b95daaa461b99ad8623bf490fb01f9131a Mon Sep 17 00:00:00 2001 From: hyejin2234 Date: Fri, 29 Nov 2024 13:06:18 +0900 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=ED=9A=8C=EC=9B=90=ED=83=88?= =?UTF-8?q?=ED=87=B4=EC=8B=9C=20custom=EC=B1=85,=20=ED=8F=B4=EB=8D=94=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C=20=EB=A1=9C=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../book/repository/BookInfoRepository.java | 2 ++ .../domain/book/service/BookInfoService.java | 28 ++++++++++++++++--- .../folder/repository/FolderRepository.java | 2 ++ .../domain/folder/service/FolderService.java | 8 ++++++ .../user/service/UserSettingService.java | 8 ++++++ 5 files changed, 44 insertions(+), 4 deletions(-) diff --git a/bookduck/src/main/java/com/mmc/bookduck/domain/book/repository/BookInfoRepository.java b/bookduck/src/main/java/com/mmc/bookduck/domain/book/repository/BookInfoRepository.java index df9be0f3..f38daa72 100644 --- a/bookduck/src/main/java/com/mmc/bookduck/domain/book/repository/BookInfoRepository.java +++ b/bookduck/src/main/java/com/mmc/bookduck/domain/book/repository/BookInfoRepository.java @@ -26,4 +26,6 @@ public interface BookInfoRepository extends JpaRepository { "ORDER BY COUNT(b) DESC") List findRelatedBooksByBookInfoId(@Param("bookInfoId") Long bookInfoId); + @Query("SELECT b FROM BookInfo b WHERE b.createdUserId = :userId") + List findCustomBookByCreatedUserId(@Param("userId") Long userId); } diff --git a/bookduck/src/main/java/com/mmc/bookduck/domain/book/service/BookInfoService.java b/bookduck/src/main/java/com/mmc/bookduck/domain/book/service/BookInfoService.java index 0c8081db..02f4c627 100644 --- a/bookduck/src/main/java/com/mmc/bookduck/domain/book/service/BookInfoService.java +++ b/bookduck/src/main/java/com/mmc/bookduck/domain/book/service/BookInfoService.java @@ -32,7 +32,7 @@ import com.mmc.bookduck.domain.book.entity.UserBook; import com.mmc.bookduck.domain.book.repository.BookInfoRepository; import com.mmc.bookduck.domain.book.repository.UserBookRepository; -import com.mmc.bookduck.domain.friend.service.FriendService; +import com.mmc.bookduck.domain.friend.repository.FriendRepository; import com.mmc.bookduck.domain.oneline.dto.response.OneLineRatingListResponseDto; import com.mmc.bookduck.domain.oneline.dto.response.OneLineRatingUnitDto; import com.mmc.bookduck.domain.oneline.entity.OneLine; @@ -77,7 +77,7 @@ public class BookInfoService { private final UserService userService; private final OneLineRepository oneLineRepository; private final S3Service s3Service; - private final FriendService friendService; + private final FriendRepository friendRepository; // api 도서 목록 조회 public BookListResponseDto searchBookList(String keyword, Long page, Long size) { @@ -342,7 +342,7 @@ public CustomBookResponseDto getCustomBookBasic(Long bookInfoId) { if(bookInfo.getCreatedUserId().equals(user.getUserId())){ // 내 customBook MyRatingOneLineReadStatusDto myRatingOneLine = getMyRatingOneLineReadStatus(bookInfo, user); return new CustomBookResponseDto(userBook, myRatingOneLine.myRating(),myRatingOneLine.oneLineId(), myRatingOneLine.myOneLine(), true); - }else if(friendService.isFriendWithCurrentUserOrNull(bookInfoCreaterUser)){ //친구 customBook + }else if(isFriend(user,bookInfoCreaterUser)){ //친구 customBook return new CustomBookResponseDto(userBook, false); }else{ throw new CustomException(ErrorCode.UNAUTHORIZED_REQUEST); //내것도 아니고 친구것도 아닌 경우 @@ -492,8 +492,9 @@ public BookListResponseDto getMostReadBooks() { @Transactional(readOnly = true) public UserArchiveResponseDto getAllUserBookArchive(Long bookInfoId, Long userId, Pageable pageable) { User bookUser = userService.getActiveUserByUserId(userId); + User currentUser = userService.getCurrentUser(); - if(!friendService.isFriendWithCurrentUserOrNull(bookUser)){ + if(!isFriend(currentUser,bookUser)){ throw new CustomException(ErrorCode.FRIENDSHIP_REQUIRED); } BookInfo bookInfo = getBookInfoById(bookInfoId); @@ -515,6 +516,14 @@ public UserArchiveResponseDto getAllUserBookArchive(Long bookInfoId, Long userId return UserArchiveResponseDto.fromWithoutTitleAuthor(dtoPage); } + @Transactional(readOnly = true) + public boolean isFriend(User currentUser, User otherUser){ + if (currentUser == null) { + return false; + } + return friendRepository.findFriendBetweenUsers(currentUser.getUserId(), otherUser.getUserId()).isPresent(); + } + @Transactional(readOnly = true) public UserArchiveResponseDto getAllMyBookArchive(Long bookInfoId, Pageable pageable) { User user = userService.getCurrentUser(); @@ -600,4 +609,15 @@ public BookListResponseDto getRelatedBooks(Long bookInfoI return new BookListResponseDto<>(topSixBooks); } + // 사용자 customBook 삭제 + public void deleteUserCustomBook(User user) { + List customBookList = bookInfoRepository.findCustomBookByCreatedUserId(user.getUserId()); + for(BookInfo customBook : customBookList){ + Optional customUserBook = userBookRepository.findByUserAndBookInfo(user, customBook); + if(customUserBook.isPresent()){ + userBookRepository.delete(customUserBook.get()); + } + bookInfoRepository.delete(customBook); + } + } } diff --git a/bookduck/src/main/java/com/mmc/bookduck/domain/folder/repository/FolderRepository.java b/bookduck/src/main/java/com/mmc/bookduck/domain/folder/repository/FolderRepository.java index 84192e28..94dff83f 100644 --- a/bookduck/src/main/java/com/mmc/bookduck/domain/folder/repository/FolderRepository.java +++ b/bookduck/src/main/java/com/mmc/bookduck/domain/folder/repository/FolderRepository.java @@ -13,4 +13,6 @@ public interface FolderRepository extends JpaRepository { List findAllByUserOrderByFolderIdDesc(User user); boolean existsByFolderNameAndUser(String folderName, User user); + + List findAllByUser(User user); } diff --git a/bookduck/src/main/java/com/mmc/bookduck/domain/folder/service/FolderService.java b/bookduck/src/main/java/com/mmc/bookduck/domain/folder/service/FolderService.java index a3ff3bd3..3bb9ae5e 100644 --- a/bookduck/src/main/java/com/mmc/bookduck/domain/folder/service/FolderService.java +++ b/bookduck/src/main/java/com/mmc/bookduck/domain/folder/service/FolderService.java @@ -295,4 +295,12 @@ public boolean checkIsCustom(UserBook userBook){ return true; } } + + // 사용자 폴더 삭제 + public void deleteUserFolder(User user) { + List folders = folderRepository.findAllByUser(user); + for (Folder folder : folders) { + deleteFolder(folder.getFolderId()); + } + } } diff --git a/bookduck/src/main/java/com/mmc/bookduck/domain/user/service/UserSettingService.java b/bookduck/src/main/java/com/mmc/bookduck/domain/user/service/UserSettingService.java index 00bc01b4..9583a5a0 100644 --- a/bookduck/src/main/java/com/mmc/bookduck/domain/user/service/UserSettingService.java +++ b/bookduck/src/main/java/com/mmc/bookduck/domain/user/service/UserSettingService.java @@ -1,5 +1,7 @@ package com.mmc.bookduck.domain.user.service; +import com.mmc.bookduck.domain.book.service.BookInfoService; +import com.mmc.bookduck.domain.folder.service.FolderService; import com.mmc.bookduck.domain.user.dto.request.UserNicknameRequestDto; import com.mmc.bookduck.domain.user.dto.request.UserSettingUpdateRequestDto; import com.mmc.bookduck.domain.user.dto.response.UserNicknameResponseDto; @@ -30,6 +32,8 @@ public class UserSettingService { private final UserSettingRepository userSettingRepository; private final RedisService redisService; private final CookieUtil cookieUtil; + private final FolderService folderService; + private final BookInfoService bookInfoService; @Transactional(readOnly = true) public UserSettingInfoResponseDto getUserSettingInfo() { @@ -85,6 +89,10 @@ private void updateSetting(T value, Consumer updateFunction) { public void deactivate(HttpServletResponse response) { User user = userService.getCurrentUser(); + // 폴더 & 커스텀책 삭제 + folderService.deleteUserFolder(user); + bookInfoService.deleteUserCustomBook(user); + String nickname = UUID.randomUUID().toString().replaceAll("-", "").substring(0, 8); user.updateNickname(nickname); user.updateStatus(UserStatus.DELETED); From 17f2aa8ca8ef9537434980c128cf61ac6e985f28 Mon Sep 17 00:00:00 2001 From: hyejin2234 Date: Sun, 1 Dec 2024 00:51:52 +0900 Subject: [PATCH 2/2] =?UTF-8?q?fix:=20=EB=B6=88=ED=95=84=EC=9A=94=ED=95=9C?= =?UTF-8?q?=20null=20=EC=B2=B4=ED=81=AC=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/mmc/bookduck/domain/book/service/BookInfoService.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/bookduck/src/main/java/com/mmc/bookduck/domain/book/service/BookInfoService.java b/bookduck/src/main/java/com/mmc/bookduck/domain/book/service/BookInfoService.java index 02f4c627..0e071fb5 100644 --- a/bookduck/src/main/java/com/mmc/bookduck/domain/book/service/BookInfoService.java +++ b/bookduck/src/main/java/com/mmc/bookduck/domain/book/service/BookInfoService.java @@ -518,9 +518,6 @@ public UserArchiveResponseDto getAllUserBookArchive(Long bookInfoId, Long userId @Transactional(readOnly = true) public boolean isFriend(User currentUser, User otherUser){ - if (currentUser == null) { - return false; - } return friendRepository.findFriendBetweenUsers(currentUser.getUserId(), otherUser.getUserId()).isPresent(); }