Skip to content

Commit

Permalink
refactor: categoryRepository 분리
Browse files Browse the repository at this point in the history
  • Loading branch information
soonga00 committed Oct 15, 2024
1 parent 9eb7ce4 commit a95c87a
Show file tree
Hide file tree
Showing 6 changed files with 75 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -23,8 +24,8 @@
@RequestMapping("/category")
@RequiredArgsConstructor
public class CategoryController implements CategoryApi {

private final CategoryService categoryService;
private final PrayFacade prayFacade;


@GetMapping("/{categoryId}")
Expand Down Expand Up @@ -58,7 +59,7 @@ public ApiResponseDto<CategoryResponseDto> deleteCategory(
@PathVariable("categoryId") Long categoryId
) {
return ApiResponseDto.success(SuccessStatus.DELETE_CATEGORY_SUCCESS,
categoryService.deleteCategory(user.getUsername(), categoryId));
prayFacade.deleteCategory(user.getUsername(), categoryId));
}

@PutMapping("/{categoryId}")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ public interface CategoryRepository extends JpaRepository<Category, Long>,
List<Category> getCategoriesByMemberAndCategoryTypeOrderByOrder(Member member,
CategoryType categoryType);

List<Category> findAllByMemberAndCategoryTypeOrderByOrderAsc(Member member, CategoryType categoryType);

default Category getCategoryByIdAndMember(Long categoryId, Member member) {
Category category = findById(categoryId)
.filter(c -> c.getMember().equals(member))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<Category> getCategoryListByMemberAndCategoryType(Member member, CategoryType categoryType) {
return categoryRepository.findAllByMemberAndCategoryTypeOrderByOrderAsc(member, categoryType);
}

private static int getNewOrder(int index, List<Category> categories, Category category) {
Category targetPosition = categories.get(index - 1);

Expand Down Expand Up @@ -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);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -41,7 +42,9 @@ default Pray getPrayByIdAndMemberId(Long prayId, String username) throws NotFoun

Pray getPrayByOriginPrayId(Long prayId);

List<Pray> findByCategoryId(Long categoryId);
List<Pray> findAllByCategory(Category category);

List<Pray> findAllByMemberAndCategoryOrderByCreatedAtAsc(Member member, Category category);

boolean existsByMemberAndOriginPrayId(Member member, Long originPrayId);

Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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;
Expand All @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -93,7 +95,6 @@ public void convertPrayToHistory() {
}
}

@Transactional
public void convertPrayToHistory(Pray pray) {
pray.complete();
History history = History.builder()
Expand All @@ -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<PrayListResponseDto> todayPray(Long prayId, String username) {
Expand Down Expand Up @@ -164,9 +175,43 @@ public PrayResponseDto deletePray(Long prayId, String username) {

@Transactional
public List<PrayListResponseDto> getPrayList(String username, String prayType) {
return categoryRepository.findAllWithOrderAndType(username, prayType);
// 사용자 정보와 카테고리 타입을 가져옴
Member member = memberService.findMemberByUserId(username);
CategoryType categoryType = CategoryType.valueOf(prayType);
List<Category> 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<PrayResponseDto> 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<PrayListResponseDto> completePray(Long prayId, String username) {
Pray pray = prayRepository.getPrayByIdAndMemberId(prayId, username);
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -22,4 +25,12 @@ public PrayResponseDto getPrayDetail(Long prayId, String username) {
public PrayResponseDto savePray(Pray pray) {
return PrayResponseDto.of(prayRepository.save(pray));
}

public List<Pray> getPrayListByCategory(Category category) {
return prayRepository.findAllByCategory(category);
}

public List<Pray> getPrayListByMemberAndCategory(Member member, Category category) {
return prayRepository.findAllByMemberAndCategoryOrderByCreatedAtAsc(member, category);
}
}

0 comments on commit a95c87a

Please sign in to comment.