From a95c87a5a4ea0ff5dc389cc85c7151f50ed4daf4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A1=B0=EC=88=98=EC=95=84?= Date: Tue, 15 Oct 2024 20:58:38 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20categoryRepository=20=EB=B6=84?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/CategoryController.java | 5 +- .../repository/CategoryRepository.java | 2 + .../category/service/CategoryService.java | 11 ++-- .../pray/repository/PrayRepository.java | 5 +- .../domain/pray/service/PrayFacade.java | 53 +++++++++++++++++-- .../domain/pray/service/PrayService.java | 11 ++++ 6 files changed, 75 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/uspray/uspray/domain/category/controller/CategoryController.java b/src/main/java/com/uspray/uspray/domain/category/controller/CategoryController.java index 44e22f4c..d89c94c6 100644 --- a/src/main/java/com/uspray/uspray/domain/category/controller/CategoryController.java +++ b/src/main/java/com/uspray/uspray/domain/category/controller/CategoryController.java @@ -3,6 +3,7 @@ import com.uspray.uspray.domain.category.dto.CategoryRequestDto; import com.uspray.uspray.domain.category.dto.CategoryResponseDto; import com.uspray.uspray.domain.category.service.CategoryService; +import com.uspray.uspray.domain.pray.service.PrayFacade; import com.uspray.uspray.global.common.dto.ApiResponseDto; import com.uspray.uspray.global.exception.SuccessStatus; import java.util.List; @@ -23,8 +24,8 @@ @RequestMapping("/category") @RequiredArgsConstructor public class CategoryController implements CategoryApi { - private final CategoryService categoryService; + private final PrayFacade prayFacade; @GetMapping("/{categoryId}") @@ -58,7 +59,7 @@ public ApiResponseDto deleteCategory( @PathVariable("categoryId") Long categoryId ) { return ApiResponseDto.success(SuccessStatus.DELETE_CATEGORY_SUCCESS, - categoryService.deleteCategory(user.getUsername(), categoryId)); + prayFacade.deleteCategory(user.getUsername(), categoryId)); } @PutMapping("/{categoryId}") diff --git a/src/main/java/com/uspray/uspray/domain/category/repository/CategoryRepository.java b/src/main/java/com/uspray/uspray/domain/category/repository/CategoryRepository.java index 413486ab..cf04e976 100644 --- a/src/main/java/com/uspray/uspray/domain/category/repository/CategoryRepository.java +++ b/src/main/java/com/uspray/uspray/domain/category/repository/CategoryRepository.java @@ -22,6 +22,8 @@ public interface CategoryRepository extends JpaRepository, List getCategoriesByMemberAndCategoryTypeOrderByOrder(Member member, CategoryType categoryType); + List findAllByMemberAndCategoryTypeOrderByOrderAsc(Member member, CategoryType categoryType); + default Category getCategoryByIdAndMember(Long categoryId, Member member) { Category category = findById(categoryId) .filter(c -> c.getMember().equals(member)) diff --git a/src/main/java/com/uspray/uspray/domain/category/service/CategoryService.java b/src/main/java/com/uspray/uspray/domain/category/service/CategoryService.java index efd7b3f7..28b6fa4d 100644 --- a/src/main/java/com/uspray/uspray/domain/category/service/CategoryService.java +++ b/src/main/java/com/uspray/uspray/domain/category/service/CategoryService.java @@ -24,12 +24,16 @@ public class CategoryService { private final MemberRepository memberRepository; private final CategoryRepository categoryRepository; private final PrayRepository prayRepository; - private final PrayFacade prayFacade; +// private final PrayFacade prayFacade; public Category getCategoryByIdAndMember(Long categoryId, Member member) { return categoryRepository.getCategoryByIdAndMember(categoryId, member); } + public List getCategoryListByMemberAndCategoryType(Member member, CategoryType categoryType) { + return categoryRepository.findAllByMemberAndCategoryTypeOrderByOrderAsc(member, categoryType); + } + private static int getNewOrder(int index, List categories, Category category) { Category targetPosition = categories.get(index - 1); @@ -80,10 +84,7 @@ public CategoryResponseDto createCategory(String username, return CategoryResponseDto.of(category); } - public CategoryResponseDto deleteCategory(String username, Long categoryId) { - Category category = categoryRepository.getCategoryByIdAndMember(categoryId, - memberRepository.getMemberByUserId(username)); - prayRepository.findByCategoryId(category.getId()).forEach(prayFacade::convertPrayToHistory); + public CategoryResponseDto deleteCategory(Category category) { categoryRepository.delete(category); return CategoryResponseDto.of(category); } diff --git a/src/main/java/com/uspray/uspray/domain/pray/repository/PrayRepository.java b/src/main/java/com/uspray/uspray/domain/pray/repository/PrayRepository.java index c6d37558..b50483d0 100644 --- a/src/main/java/com/uspray/uspray/domain/pray/repository/PrayRepository.java +++ b/src/main/java/com/uspray/uspray/domain/pray/repository/PrayRepository.java @@ -1,5 +1,6 @@ package com.uspray.uspray.domain.pray.repository; +import com.uspray.uspray.domain.category.model.Category; import com.uspray.uspray.domain.member.model.Member; import com.uspray.uspray.domain.pray.model.Pray; import com.uspray.uspray.global.exception.ErrorStatus; @@ -41,7 +42,9 @@ default Pray getPrayByIdAndMemberId(Long prayId, String username) throws NotFoun Pray getPrayByOriginPrayId(Long prayId); - List findByCategoryId(Long categoryId); + List findAllByCategory(Category category); + + List findAllByMemberAndCategoryOrderByCreatedAtAsc(Member member, Category category); boolean existsByMemberAndOriginPrayId(Member member, Long originPrayId); diff --git a/src/main/java/com/uspray/uspray/domain/pray/service/PrayFacade.java b/src/main/java/com/uspray/uspray/domain/pray/service/PrayFacade.java index 897e27fa..51006075 100644 --- a/src/main/java/com/uspray/uspray/domain/pray/service/PrayFacade.java +++ b/src/main/java/com/uspray/uspray/domain/pray/service/PrayFacade.java @@ -1,7 +1,7 @@ package com.uspray.uspray.domain.pray.service; +import com.uspray.uspray.domain.category.dto.CategoryResponseDto; import com.uspray.uspray.domain.category.model.Category; -import com.uspray.uspray.domain.category.repository.CategoryRepository; import com.uspray.uspray.domain.category.service.CategoryService; import com.uspray.uspray.domain.group.service.ScrapAndHeartService; import com.uspray.uspray.domain.history.model.History; @@ -14,6 +14,7 @@ import com.uspray.uspray.domain.pray.dto.pray.response.PrayResponseDto; import com.uspray.uspray.domain.pray.model.Pray; import com.uspray.uspray.domain.pray.repository.PrayRepository; +import com.uspray.uspray.global.enums.CategoryType; import com.uspray.uspray.global.enums.PrayType; import com.uspray.uspray.global.exception.ErrorStatus; import com.uspray.uspray.global.exception.model.CustomException; @@ -22,7 +23,9 @@ import com.uspray.uspray.global.push.service.FCMNotificationService; import com.uspray.uspray.global.push.service.NotificationLogService; import java.time.LocalDate; +import java.util.Collections; import java.util.List; +import java.util.stream.Collectors; import javax.transaction.Transactional; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -34,7 +37,6 @@ public class PrayFacade { private final PrayRepository prayRepository; - private final CategoryRepository categoryRepository; private final HistoryService historyService; private final NotificationLogService notificationLogService; private final FCMNotificationService fcmNotificationService; @@ -93,7 +95,6 @@ public void convertPrayToHistory() { } } - @Transactional public void convertPrayToHistory(Pray pray) { pray.complete(); History history = History.builder() @@ -103,6 +104,16 @@ public void convertPrayToHistory(Pray pray) { prayRepository.delete(pray); } + @Transactional + public CategoryResponseDto deleteCategory(String username, Long categoryId) { + Member member = memberService.findMemberByUserId(username); + Category category = categoryService.getCategoryByIdAndMember(categoryId, member); + + prayService.getPrayListByCategory(category).forEach(this::convertPrayToHistory); + + return categoryService.deleteCategory(category); + } + @Transactional public List todayPray(Long prayId, String username) { @@ -164,9 +175,43 @@ public PrayResponseDto deletePray(Long prayId, String username) { @Transactional public List getPrayList(String username, String prayType) { - return categoryRepository.findAllWithOrderAndType(username, prayType); + // 사용자 정보와 카테고리 타입을 가져옴 + Member member = memberService.findMemberByUserId(username); + CategoryType categoryType = CategoryType.valueOf(prayType); + List categoryList = categoryService.getCategoryListByMemberAndCategoryType(member, categoryType); + + // 카테고리 리스트가 비어있을 경우 빈 리스트 반환 + if (categoryList.isEmpty()) { + return Collections.emptyList(); + } + + // PrayListResponseDto 생성 및 반환 + return categoryList.stream() + .map(category -> createPrayListResponseDto(member, category)) + .collect(Collectors.toList()); } + private PrayListResponseDto createPrayListResponseDto(Member member, Category category) { + // 기도 리스트 변환 + List prayResponseDtos = prayService.getPrayListByMemberAndCategory(member, category).stream() + .map(this::convertToPrayResponseDto) + .collect(Collectors.toList()); + + // PrayListResponseDto 생성 + return new PrayListResponseDto(category.getId(), category.getName(), category.getColor(), prayResponseDtos); + } + + private PrayResponseDto convertToPrayResponseDto(Pray pray) { + // 기도의 타입에 따라 적절한 PrayResponseDto 생성 + if (pray.getPrayType().equals(PrayType.SHARED)) { + Member originMember = memberService.findMemberById(pray.getOriginMemberId()); + return PrayResponseDto.shared(pray, originMember); + } else { + return PrayResponseDto.of(pray); + } + } + + @Transactional public List completePray(Long prayId, String username) { Pray pray = prayRepository.getPrayByIdAndMemberId(prayId, username); diff --git a/src/main/java/com/uspray/uspray/domain/pray/service/PrayService.java b/src/main/java/com/uspray/uspray/domain/pray/service/PrayService.java index dbac9c61..f1f25fa1 100644 --- a/src/main/java/com/uspray/uspray/domain/pray/service/PrayService.java +++ b/src/main/java/com/uspray/uspray/domain/pray/service/PrayService.java @@ -1,8 +1,11 @@ package com.uspray.uspray.domain.pray.service; +import com.uspray.uspray.domain.category.model.Category; +import com.uspray.uspray.domain.member.model.Member; import com.uspray.uspray.domain.pray.dto.pray.response.PrayResponseDto; import com.uspray.uspray.domain.pray.model.Pray; import com.uspray.uspray.domain.pray.repository.PrayRepository; +import java.util.List; import javax.transaction.Transactional; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -22,4 +25,12 @@ public PrayResponseDto getPrayDetail(Long prayId, String username) { public PrayResponseDto savePray(Pray pray) { return PrayResponseDto.of(prayRepository.save(pray)); } + + public List getPrayListByCategory(Category category) { + return prayRepository.findAllByCategory(category); + } + + public List getPrayListByMemberAndCategory(Member member, Category category) { + return prayRepository.findAllByMemberAndCategoryOrderByCreatedAtAsc(member, category); + } }