diff --git a/src/main/java/com/uspray/uspray/controller/HistoryController.java b/src/main/java/com/uspray/uspray/controller/HistoryController.java index 51eba0a3..9c0ea8b3 100644 --- a/src/main/java/com/uspray/uspray/controller/HistoryController.java +++ b/src/main/java/com/uspray/uspray/controller/HistoryController.java @@ -6,7 +6,7 @@ import com.uspray.uspray.DTO.pray.request.PrayRequestDto; import com.uspray.uspray.exception.SuccessStatus; import com.uspray.uspray.service.HistoryService; -import com.uspray.uspray.service.PrayService; +import com.uspray.uspray.service.PrayFacadeService; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.tags.Tag; @@ -30,10 +30,10 @@ @RequiredArgsConstructor @SecurityRequirement(name = "JWT Auth") public class HistoryController { - + private final HistoryService historyService; - private final PrayService prayService; - + private final PrayFacadeService prayFacadeService; + @GetMapping public ApiResponseDto getHistoryList( @Parameter(hidden = true) @AuthenticationPrincipal User user, @@ -43,7 +43,7 @@ public ApiResponseDto getHistoryList( return ApiResponseDto.success(SuccessStatus.GET_HISTORY_LIST_SUCCESS, historyService.getHistoryList(user.getUsername(), type, page, size)); } - + // 이름, 내용, 카테고리에 해당되는 키워드 전부를 찾아서 검색 // 내가 쓴 기도제목, 공유받은 기도제목 체크박스 (최소 한 개 이상 선택) // 날짜까지 (옵션) @@ -61,7 +61,7 @@ public ApiResponseDto searchHistoryList( historyService.searchHistoryList(user.getUsername(), keyword, isPersonal, isShared, startDate, endDate, page, size)); } - + @GetMapping("/detail/{historyId}") public ApiResponseDto getHistoryDetail( @Parameter(hidden = true) @AuthenticationPrincipal User user, @@ -69,13 +69,13 @@ public ApiResponseDto getHistoryDetail( return ApiResponseDto.success(SuccessStatus.GET_HISTORY_DETAIL_SUCCESS, historyService.getHistoryDetail(user.getUsername(), historyId)); } - + @PostMapping("/pray/{historyId}") public ApiResponseDto createPray( @Parameter(hidden = true) @AuthenticationPrincipal User user, @PathVariable Long historyId, @RequestBody @Valid PrayRequestDto prayRequestDto) { - prayService.createPray(prayRequestDto, user.getUsername()); + prayFacadeService.createPray(prayRequestDto, user.getUsername()); historyService.deleteHistory(historyId, user.getUsername()); return ApiResponseDto.success(SuccessStatus.CREATE_PRAY_SUCCESS, historyService.getHistoryList(user.getUsername(), "PERSONAL", 0, 10)); diff --git a/src/main/java/com/uspray/uspray/controller/PrayController.java b/src/main/java/com/uspray/uspray/controller/PrayController.java index bc5c84c9..5e693adf 100644 --- a/src/main/java/com/uspray/uspray/controller/PrayController.java +++ b/src/main/java/com/uspray/uspray/controller/PrayController.java @@ -6,7 +6,7 @@ import com.uspray.uspray.DTO.pray.request.PrayRequestDto; import com.uspray.uspray.DTO.pray.request.PrayResponseDto; import com.uspray.uspray.exception.SuccessStatus; -import com.uspray.uspray.service.HistoryService; +import com.uspray.uspray.service.PrayFacadeService; import com.uspray.uspray.service.PrayService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; @@ -37,10 +37,10 @@ @RequiredArgsConstructor @SecurityRequirement(name = "JWT Auth") public class PrayController { - + private final PrayService prayService; - private final HistoryService historyService; - + private final PrayFacadeService prayFacadeService; + @Operation(summary = "기도제목 목록 조회") @ApiResponse( responseCode = "200", @@ -54,7 +54,7 @@ public ApiResponseDto> getPrayList( return ApiResponseDto.success(SuccessStatus.GET_PRAY_LIST_SUCCESS, prayService.getPrayList(user.getUsername(), prayType)); } - + @GetMapping("/{prayId}") @ApiResponse( responseCode = "200", @@ -68,7 +68,7 @@ public ApiResponseDto getPrayDetail( return ApiResponseDto.success(SuccessStatus.GET_PRAY_SUCCESS, prayService.getPrayDetail(prayId, user.getUsername())); } - + @PostMapping() @ApiResponse( responseCode = "201", @@ -81,9 +81,9 @@ public ApiResponseDto createPray( @Parameter(hidden = true) @AuthenticationPrincipal User user ) { return ApiResponseDto.success(SuccessStatus.CREATE_PRAY_SUCCESS, - prayService.createPray(prayRequestDto, user.getUsername())); + prayFacadeService.createPray(prayRequestDto, user.getUsername())); } - + @DeleteMapping("/{prayId}") @ApiResponse(responseCode = "204", description = "기도제목 삭제") @Operation(summary = "기도제목 삭제") @@ -94,7 +94,7 @@ public ApiResponseDto deletePray( return ApiResponseDto.success(SuccessStatus.DELETE_PRAY_SUCCESS, prayService.deletePray(prayId, user.getUsername())); } - + @PutMapping("/{prayId}") @ApiResponse( responseCode = "200", @@ -107,9 +107,9 @@ public ApiResponseDto updatePray( @Parameter(hidden = true) @AuthenticationPrincipal User user ) { return ApiResponseDto.success(SuccessStatus.UPDATE_PRAY_SUCCESS, - prayService.updatePray(prayId, user.getUsername(), prayRequestDto)); + prayFacadeService.updatePray(prayId, user.getUsername(), prayRequestDto)); } - + @Operation(summary = "오늘 기도하기") @ApiResponse( responseCode = "200", @@ -123,7 +123,7 @@ public ApiResponseDto> todayPray( return ApiResponseDto.success(SuccessStatus.INCREASE_PRAY_COUNT_SUCCESS, prayService.todayPray(prayId, user.getUsername())); } - + @Operation(summary = "기도 완료하기") @ApiResponse( responseCode = "200", @@ -134,7 +134,7 @@ public ApiResponseDto> completePray( @Parameter(description = "기도제목 ID", required = true) @PathVariable("prayId") Long prayId, @Parameter(hidden = true) @AuthenticationPrincipal User user ) { - historyService.createHistory(user.getUsername(), prayId); + prayFacadeService.createHistory(user.getUsername(), prayId); return ApiResponseDto.success(SuccessStatus.GET_PRAY_LIST_SUCCESS, prayService.completePray(prayId, user.getUsername())); } diff --git a/src/main/java/com/uspray/uspray/service/HistoryService.java b/src/main/java/com/uspray/uspray/service/HistoryService.java index 635278b6..34a76d5d 100644 --- a/src/main/java/com/uspray/uspray/service/HistoryService.java +++ b/src/main/java/com/uspray/uspray/service/HistoryService.java @@ -6,14 +6,11 @@ import com.uspray.uspray.Enums.PrayType; import com.uspray.uspray.domain.History; import com.uspray.uspray.domain.Member; -import com.uspray.uspray.domain.Pray; import com.uspray.uspray.exception.ErrorStatus; import com.uspray.uspray.exception.model.NotFoundException; import com.uspray.uspray.infrastructure.HistoryRepository; import com.uspray.uspray.infrastructure.MemberRepository; -import com.uspray.uspray.infrastructure.PrayRepository; import java.time.LocalDate; -import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; @@ -25,15 +22,14 @@ @Service @RequiredArgsConstructor public class HistoryService { - + private final HistoryRepository historyRepository; private final MemberRepository memberRepository; - private final PrayRepository prayRepository; - + @Transactional(readOnly = true) public HistoryListResponseDto getHistoryList(String username, String type, int page, int size) { // type은 대소문자 구분하지 않습니다 - + Pageable pageable = PageRequest.of(page, size, Sort.by("deadline").descending()); Member member = memberRepository.getMemberByUserId(username); Page historyList; @@ -49,12 +45,12 @@ public HistoryListResponseDto getHistoryList(String username, String type, int p return new HistoryListResponseDto(historyList.getContent(), historyList.getTotalPages()); } - + @Transactional(readOnly = true) public HistoryListResponseDto searchHistoryList(String username, String keyword, Boolean isPersonal, Boolean isShared, LocalDate startDate, LocalDate endDate, int page, int size) { - + // 전체 파라미터가 null 인 경우 예외처리 if (keyword == null && isPersonal == null && isShared == null && startDate == null && endDate == null) { @@ -66,7 +62,7 @@ public HistoryListResponseDto searchHistoryList(String username, String keyword, .map(HistoryResponseDto::of); return new HistoryListResponseDto(historyList.getContent(), historyList.getTotalPages()); } - + @Transactional(readOnly = true) public HistoryDetailResponseDto getHistoryDetail(String username, Long historyId) { Member member = memberRepository.getMemberByUserId(username); @@ -77,28 +73,7 @@ public HistoryDetailResponseDto getHistoryDetail(String username, Long historyId } return HistoryDetailResponseDto.of(history); } - - @Transactional - public void convertPrayToHistory() { - List prayList = prayRepository.findAllByDeadlineBefore(LocalDate.now()); - for (Pray pray : prayList) { - History history = History.builder() - .pray(pray) - .build(); - historyRepository.save(history); - prayRepository.delete(pray); - } - } - - public void createHistory(String username, Long prayId) { - Pray pray = prayRepository.getPrayByIdAndMemberId(prayId, username); - pray.complete(); - History history = History.builder() - .pray(pray) - .build(); - historyRepository.save(history); - } - + public void deleteHistory(Long historyId, String username) { Member member = memberRepository.getMemberByUserId(username); History history = historyRepository.findByIdAndMember(historyId, member); diff --git a/src/main/java/com/uspray/uspray/service/PrayFacadeService.java b/src/main/java/com/uspray/uspray/service/PrayFacadeService.java new file mode 100644 index 00000000..55c100dc --- /dev/null +++ b/src/main/java/com/uspray/uspray/service/PrayFacadeService.java @@ -0,0 +1,71 @@ +package com.uspray.uspray.service; + +import com.uspray.uspray.DTO.pray.request.PrayRequestDto; +import com.uspray.uspray.DTO.pray.request.PrayResponseDto; +import com.uspray.uspray.Enums.PrayType; +import com.uspray.uspray.domain.Category; +import com.uspray.uspray.domain.History; +import com.uspray.uspray.domain.Member; +import com.uspray.uspray.domain.Pray; +import com.uspray.uspray.infrastructure.CategoryRepository; +import com.uspray.uspray.infrastructure.HistoryRepository; +import com.uspray.uspray.infrastructure.MemberRepository; +import com.uspray.uspray.infrastructure.PrayRepository; +import java.time.LocalDate; +import java.util.List; +import javax.transaction.Transactional; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class PrayFacadeService { + + private final MemberRepository memberRepository; + private final PrayRepository prayRepository; + private final CategoryRepository categoryRepository; + private final HistoryRepository historyRepository; + + @Transactional + public PrayResponseDto createPray(PrayRequestDto prayRequestDto, String username) { + Member member = memberRepository.getMemberByUserId(username); + Category category = categoryRepository.getCategoryByIdAndMember( + prayRequestDto.getCategoryId(), + member); + Pray pray = prayRequestDto.toEntity(member, category, PrayType.PERSONAL); + prayRepository.save(pray); + return PrayResponseDto.of(pray); + } + + @Transactional + public PrayResponseDto updatePray(Long prayId, String username, PrayRequestDto prayRequestDto) { + Pray pray = prayRepository.getPrayByIdAndMemberId(prayId, username); + categoryRepository.getCategoryByIdAndMember( + prayRequestDto.getCategoryId(), + pray.getMember()); + pray.update(prayRequestDto); + return PrayResponseDto.of(pray); + } + + @Transactional + public void convertPrayToHistory() { + List prayList = prayRepository.findAllByDeadlineBefore(LocalDate.now()); + for (Pray pray : prayList) { + History history = History.builder() + .pray(pray) + .build(); + historyRepository.save(history); + prayRepository.delete(pray); + } + } + + + public void createHistory(String username, Long prayId) { + Pray pray = prayRepository.getPrayByIdAndMemberId(prayId, username); + pray.complete(); + History history = History.builder() + .pray(pray) + .build(); + historyRepository.save(history); + } +} diff --git a/src/main/java/com/uspray/uspray/service/PrayService.java b/src/main/java/com/uspray/uspray/service/PrayService.java index d96f268b..a6d77616 100644 --- a/src/main/java/com/uspray/uspray/service/PrayService.java +++ b/src/main/java/com/uspray/uspray/service/PrayService.java @@ -1,16 +1,11 @@ package com.uspray.uspray.service; import com.uspray.uspray.DTO.pray.PrayListResponseDto; -import com.uspray.uspray.DTO.pray.request.PrayRequestDto; import com.uspray.uspray.DTO.pray.request.PrayResponseDto; import com.uspray.uspray.Enums.PrayType; -import com.uspray.uspray.domain.Category; -import com.uspray.uspray.domain.Member; import com.uspray.uspray.domain.Pray; import com.uspray.uspray.exception.ErrorStatus; import com.uspray.uspray.exception.model.NotFoundException; -import com.uspray.uspray.infrastructure.CategoryRepository; -import com.uspray.uspray.infrastructure.MemberRepository; import com.uspray.uspray.infrastructure.PrayRepository; import java.time.LocalDate; import java.util.List; @@ -23,54 +18,31 @@ @Service @RequiredArgsConstructor public class PrayService { - + private final PrayRepository prayRepository; - private final MemberRepository memberRepository; - private final CategoryRepository categoryRepository; - - @Transactional - public PrayResponseDto createPray(PrayRequestDto prayRequestDto, String username) { - Member member = memberRepository.getMemberByUserId(username); - Category category = categoryRepository.getCategoryByIdAndMember( - prayRequestDto.getCategoryId(), - member); - Pray pray = prayRequestDto.toEntity(member, category, PrayType.PERSONAL); - prayRepository.save(pray); - return PrayResponseDto.of(pray); - } - + @Transactional public PrayResponseDto getPrayDetail(Long prayId, String username) { Pray pray = prayRepository.getPrayByIdAndMemberId(prayId, username); return PrayResponseDto.of(pray); } - + @Transactional public PrayResponseDto deletePray(Long prayId, String username) { Pray pray = prayRepository.getPrayByIdAndMemberId(prayId, username); prayRepository.delete(pray); return PrayResponseDto.of(pray); } - - @Transactional - public PrayResponseDto updatePray(Long prayId, String username, PrayRequestDto prayRequestDto) { - Pray pray = prayRepository.getPrayByIdAndMemberId(prayId, username); - categoryRepository.getCategoryByIdAndMember( - prayRequestDto.getCategoryId(), - pray.getMember()); - pray.update(prayRequestDto); - return PrayResponseDto.of(pray); - } - + @Transactional public List getPrayList(String username, String prayType) { - + List prays = prayRepository.findAllWithOrderAndType(username, prayType); - + // Pray 엔티티를 categoryId를 기준으로 그룹화한 맵 생성 Map> prayMap = prays.stream() .collect(Collectors.groupingBy(pray -> pray.getCategory().getId())); - + // 그룹화된 맵을 PrayListResponseDto 변환하여 반환 return prayMap.entrySet().stream() .map(entry -> new PrayListResponseDto(entry.getKey(), @@ -80,7 +52,7 @@ public List getPrayList(String username, String prayType) { .collect(Collectors.toList()))) .collect(Collectors.toList()); } - + @Transactional public List todayPray(Long prayId, String username) { Pray pray = prayRepository.getPrayByIdAndMemberId(prayId, username); @@ -93,12 +65,12 @@ public List todayPray(Long prayId, String username) { } return getPrayList(username, PrayType.PERSONAL.stringValue()); } - + @Transactional public List completePray(Long prayId, String username) { Pray pray = prayRepository.getPrayByIdAndMemberId(prayId, username); prayRepository.delete(pray); - + return getPrayList(username, pray.getPrayType().stringValue()); } } diff --git a/src/main/java/com/uspray/uspray/service/SchedulerService.java b/src/main/java/com/uspray/uspray/service/SchedulerService.java index 5160a8d3..15e20372 100644 --- a/src/main/java/com/uspray/uspray/service/SchedulerService.java +++ b/src/main/java/com/uspray/uspray/service/SchedulerService.java @@ -16,14 +16,15 @@ public class SchedulerService { private final MemberQueryRepository memberQueryRepository; private final FCMNotificationService fcmNotificationService; private final ShareService shareService; - private final HistoryService historyService; + private final PrayFacadeService prayFacadeService; @Scheduled(cron = "0 0 8 * * *") public void pushPrayNotification() throws IOException { List deviceTokens = memberQueryRepository.getDeviceTokensByFirstNotiAgree( true); for (String device : deviceTokens) { - fcmNotificationService.sendMessageTo(device, NotificationType.PRAY_TIME.getTitle(), NotificationType.PRAY_TIME.getBody()); + fcmNotificationService.sendMessageTo(device, NotificationType.PRAY_TIME.getTitle(), + NotificationType.PRAY_TIME.getBody()); } } @@ -35,6 +36,6 @@ public void cleanSharedPray() { @Scheduled(cron = "0 0 0 * * ?") public void convertPrayToHistory() { - historyService.convertPrayToHistory(); + prayFacadeService.convertPrayToHistory(); } }