From b7c5800e292aae1d2047c4589614bdb2ca4fc140 Mon Sep 17 00:00:00 2001 From: Ssamssamukja <109636635+Ssamssamukja@users.noreply.github.com> Date: Sun, 12 Jan 2025 08:01:28 +0900 Subject: [PATCH 1/2] =?UTF-8?q?=E2=9C=A8=20Feat:=20=EC=97=90=EB=9F=AC=20?= =?UTF-8?q?=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Snacker/apiPayload/code/status/ErrorStatus.java | 2 +- .../apiPayload/exception/CalendarException.java | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 Midnight-Snacker/src/main/java/com/example/Midnight/Snacker/apiPayload/exception/CalendarException.java diff --git a/Midnight-Snacker/src/main/java/com/example/Midnight/Snacker/apiPayload/code/status/ErrorStatus.java b/Midnight-Snacker/src/main/java/com/example/Midnight/Snacker/apiPayload/code/status/ErrorStatus.java index 6d8fefa..77ac0a2 100644 --- a/Midnight-Snacker/src/main/java/com/example/Midnight/Snacker/apiPayload/code/status/ErrorStatus.java +++ b/Midnight-Snacker/src/main/java/com/example/Midnight/Snacker/apiPayload/code/status/ErrorStatus.java @@ -50,7 +50,7 @@ public enum ErrorStatus implements BaseErrorCode { //calendar - CALENDAR_NOT_FOUND(HttpStatus.NOT_FOUND,"CALENDAR_404", " 해당 기록을 찾으 수 없습니다."); + CALENDAR_NOT_FOUND(HttpStatus.NOT_FOUND,"CALENDAR_404", " 해당 기록을 찾을 수 없습니다."); private final HttpStatus httpStatus; private final String code; diff --git a/Midnight-Snacker/src/main/java/com/example/Midnight/Snacker/apiPayload/exception/CalendarException.java b/Midnight-Snacker/src/main/java/com/example/Midnight/Snacker/apiPayload/exception/CalendarException.java new file mode 100644 index 0000000..3cd1df9 --- /dev/null +++ b/Midnight-Snacker/src/main/java/com/example/Midnight/Snacker/apiPayload/exception/CalendarException.java @@ -0,0 +1,10 @@ +package com.example.Midnight.Snacker.apiPayload.exception; + +import com.example.Midnight.Snacker.apiPayload.code.BaseErrorCode; + +public class CalendarException extends GeneralException { + + public CalendarException(BaseErrorCode code) { + super(code); + } +} From 2768b04ac402fc24b15d1dd6db71878d269f4ba2 Mon Sep 17 00:00:00 2001 From: Ssamssamukja <109636635+Ssamssamukja@users.noreply.github.com> Date: Sun, 12 Jan 2025 08:01:49 +0900 Subject: [PATCH 2/2] =?UTF-8?q?=E2=9C=A8=20Feat:=20=EC=9B=94=EB=B3=84=20?= =?UTF-8?q?=EC=9D=BC=EB=B3=84=20=EA=B8=B0=EB=A1=9D=20=EC=A1=B0=ED=9A=8C=20?= =?UTF-8?q?api=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/CalendarRepository.java | 7 ++- .../CalendarService/CalendarService.java | 4 +- .../CalendarService/CalendarServiceImpl.java | 62 +++++++++---------- .../service/PostService/PostServiceImpl.java | 3 +- .../web/controller/CalendarController.java | 23 +++++-- .../dto/CalendarDTO/CalendarResponseDTO.java | 44 ++++++++++--- 6 files changed, 95 insertions(+), 48 deletions(-) diff --git a/Midnight-Snacker/src/main/java/com/example/Midnight/Snacker/repository/CalendarRepository.java b/Midnight-Snacker/src/main/java/com/example/Midnight/Snacker/repository/CalendarRepository.java index f79bea8..26db6bb 100644 --- a/Midnight-Snacker/src/main/java/com/example/Midnight/Snacker/repository/CalendarRepository.java +++ b/Midnight-Snacker/src/main/java/com/example/Midnight/Snacker/repository/CalendarRepository.java @@ -12,10 +12,11 @@ import java.time.LocalDate; import java.time.LocalDateTime; import java.util.List; +import java.util.Optional; public interface CalendarRepository extends JpaRepository { - List findAllByDateBetweenOrderByDateAsc(LocalDateTime startDate, LocalDateTime endDate); + List findAllByMemberAndDateBetweenOrderByDateAsc(Member member, LocalDateTime startDate, LocalDateTime endDate); List findAllByMember(Member member); @@ -24,4 +25,8 @@ public interface CalendarRepository extends JpaRepository { // 특정 멤버와 날짜 범위로 필터링하여 전체 개수 가져오기 int countByMemberAndDateBetween(Member member, LocalDateTime startDate, LocalDateTime endDate); + + List findByDateBetweenAndMember(LocalDateTime startDate, LocalDateTime endDate, Member member); + + Optional findByDateAndMember(LocalDateTime date, Member member); } diff --git a/Midnight-Snacker/src/main/java/com/example/Midnight/Snacker/service/CalendarService/CalendarService.java b/Midnight-Snacker/src/main/java/com/example/Midnight/Snacker/service/CalendarService/CalendarService.java index c7fae1d..de54c2f 100644 --- a/Midnight-Snacker/src/main/java/com/example/Midnight/Snacker/service/CalendarService/CalendarService.java +++ b/Midnight-Snacker/src/main/java/com/example/Midnight/Snacker/service/CalendarService/CalendarService.java @@ -15,8 +15,8 @@ public interface CalendarService { //Long addRecord(Member member, Category category, Color color, MultipartFile image, RegisterRequestDTO request); Long addRecord(Member member, CategoryE categoryE, Color color, MultipartFile image, LocalDateTime date, String detailFood); + CalendarResponseDTO.CalendarResponseMonthlyListDTO getMonthlyRecords(int year, int month, Member member); - List getCalendarInfo(LocalDate localDate); - CalendarResponseDTO getRecord(LocalDate date, Member member); + List getDailyRecord(LocalDate date, Member member); void deleteRecord(Member member, Long calendarId); } diff --git a/Midnight-Snacker/src/main/java/com/example/Midnight/Snacker/service/CalendarService/CalendarServiceImpl.java b/Midnight-Snacker/src/main/java/com/example/Midnight/Snacker/service/CalendarService/CalendarServiceImpl.java index d92acd4..da62e3e 100644 --- a/Midnight-Snacker/src/main/java/com/example/Midnight/Snacker/service/CalendarService/CalendarServiceImpl.java +++ b/Midnight-Snacker/src/main/java/com/example/Midnight/Snacker/service/CalendarService/CalendarServiceImpl.java @@ -1,10 +1,12 @@ package com.example.Midnight.Snacker.service.CalendarService; import com.example.Midnight.Snacker.apiPayload.code.status.ErrorStatus; +import com.example.Midnight.Snacker.apiPayload.exception.CalendarException; import com.example.Midnight.Snacker.apiPayload.exception.CustomException; import com.example.Midnight.Snacker.converter.CalenderConverter; import com.example.Midnight.Snacker.domain.Calendar; import com.example.Midnight.Snacker.domain.Member; +import com.example.Midnight.Snacker.domain.Post; import com.example.Midnight.Snacker.domain.enums.CategoryE; import com.example.Midnight.Snacker.domain.enums.Color; import com.example.Midnight.Snacker.repository.CalendarRepository; @@ -19,7 +21,9 @@ import java.time.LocalDate; import java.time.LocalDateTime; +import java.time.YearMonth; import java.util.List; +import java.util.stream.Collectors; @Service @RequiredArgsConstructor @@ -58,43 +62,37 @@ public Long addRecord(Member member, CategoryE categoryE, Color color, Multipart } @Override - @Transactional - public List getCalendarInfo(LocalDate localDate){ - //LocalDate를 LocalDateTime의 범위로 변환 - LocalDateTime startDateTime = localDate.atTime(0,0,0); - LocalDateTime endDateTime = localDate.atTime(23, 59, 59); + public CalendarResponseDTO.CalendarResponseMonthlyListDTO getMonthlyRecords(int year, int month, Member member) { + LocalDate startOfMonth = YearMonth.of(year, month).atDay(1); + LocalDate endOfMonth = YearMonth.of(year, month).atEndOfMonth(); - //repository로 찾기 - List calendars = calendarRepository.findAllByDateBetweenOrderByDateAsc(startDateTime, endDateTime); + List calendars = calendarRepository.findByDateBetweenAndMember(startOfMonth.atStartOfDay(), endOfMonth.atStartOfDay(), member); - return calendars.stream() - .map(calendar -> new CalendarInfoDTO( - calendar.getId(), - calendar.getCategoryE(), - calendar.getColor(), - calendar.getDetailFood(), - calendar.getImageUrl() - )).toList(); + int blackCount = (int) calendars.stream().filter(calendar -> calendar.getColor() == Color.BLACK).count(); + int whiteCount = (int) calendars.stream().filter(calendar -> calendar.getColor() == Color.WHITE).count(); + + List calendarInfoDTOS = calendars.stream() + .map(calendar -> new CalendarResponseDTO.CalendarResponseMonthlyDTO(calendar.getDate().toLocalDate(), calendar.getColor())) + .collect(Collectors.toList()); + + return new CalendarResponseDTO.CalendarResponseMonthlyListDTO(blackCount, whiteCount, calendarInfoDTOS); } @Override - @Transactional - //월일별 기록 조회 method - public CalendarResponseDTO getRecord(LocalDate localDate,Member member){ - List calendarInfos = getCalendarInfo(localDate); - - int blackCount =(int) calendarInfos.stream() - .filter(dto -> - "BLACK".equalsIgnoreCase( - String.valueOf(dto.getColor()))) - .count(); - int whiteCount = (int) calendarInfos.stream() - .filter(dto -> - "WHITE".equalsIgnoreCase( - String.valueOf(dto.getColor()))) - .count(); - - return new CalendarResponseDTO(blackCount, whiteCount, calendarInfos); + public List getDailyRecord(LocalDate date, Member member) { + LocalDateTime startDateTime = date.atTime(0,0,0); + LocalDateTime endDateTime = date.atTime(23, 59, 59); + List calendars = calendarRepository.findAllByMemberAndDateBetweenOrderByDateAsc(member, startDateTime, endDateTime) + .stream().map(calendar -> new CalendarResponseDTO.CalendarResponseDailyDTO( + calendar.getColor(), + calendar.getImageUrl(), + calendar.getDetailFood(), + calendar.getCategoryE(), + calendar.getId() + )) + .collect(Collectors.toList()); + + return calendars; } //기록 삭제 method diff --git a/Midnight-Snacker/src/main/java/com/example/Midnight/Snacker/service/PostService/PostServiceImpl.java b/Midnight-Snacker/src/main/java/com/example/Midnight/Snacker/service/PostService/PostServiceImpl.java index 45feab3..e829a95 100644 --- a/Midnight-Snacker/src/main/java/com/example/Midnight/Snacker/service/PostService/PostServiceImpl.java +++ b/Midnight-Snacker/src/main/java/com/example/Midnight/Snacker/service/PostService/PostServiceImpl.java @@ -22,7 +22,7 @@ public class PostServiceImpl implements PostService { private final PostRepository postRepository; - private final MemberRepository memberRepository; + @Override public Post AddPost(String title, String body, String imageUrl, LocalDateTime date, Member member) { Post newPost = Post.builder() @@ -37,6 +37,7 @@ public Post AddPost(String title, String body, String imageUrl, LocalDateTime da Post savedPost = postRepository.save(newPost); return savedPost; + } //게시글 등록 @Override diff --git a/Midnight-Snacker/src/main/java/com/example/Midnight/Snacker/web/controller/CalendarController.java b/Midnight-Snacker/src/main/java/com/example/Midnight/Snacker/web/controller/CalendarController.java index fa49327..d2ed8bf 100644 --- a/Midnight-Snacker/src/main/java/com/example/Midnight/Snacker/web/controller/CalendarController.java +++ b/Midnight-Snacker/src/main/java/com/example/Midnight/Snacker/web/controller/CalendarController.java @@ -48,18 +48,31 @@ public ApiResponse registerCalendar( return ApiResponse.of(SuccessStatus.ADD_CALENDAR_OK, calendarId); } - @GetMapping + @GetMapping("/api/calender/monthly") @Operation( - summary = "모든 기록 조회 API") - public ApiResponse showCalendar( + summary = "월별 기록 조회 API") + public ApiResponse getMonthlyCalendar( @Parameter(name = "user", hidden = true) @AuthUser Member member, - @RequestParam(value = "date") LocalDate date){ + @RequestParam(value = "year") int year, + @RequestParam(value = "month") int month){ - CalendarResponseDTO response = calendarService.getRecord(date, member); + CalendarResponseDTO.CalendarResponseMonthlyListDTO response = calendarService.getMonthlyRecords(year, month, member); return ApiResponse.of(SuccessStatus.INQUERY_MONTH_CALENDAR_OK,response); } + @GetMapping("/api/calender/count/daily") + @Operation( + summary = "일별 기록 조회 API") + public ApiResponse> getDailyCalendar( + @Parameter(name = "user", hidden = true) @AuthUser Member member, + @RequestParam(value = "date") LocalDate date){ + + List response = calendarService.getDailyRecord(date, member); + + return ApiResponse.of(SuccessStatus.INQUERY_DATE_CALENDAR_OK,response); + } + @DeleteMapping("/{calendarId}") @Operation(summary = "기록 삭제") public ApiResponse deleteCalendar( diff --git a/Midnight-Snacker/src/main/java/com/example/Midnight/Snacker/web/dto/CalendarDTO/CalendarResponseDTO.java b/Midnight-Snacker/src/main/java/com/example/Midnight/Snacker/web/dto/CalendarDTO/CalendarResponseDTO.java index 40583a0..f129205 100644 --- a/Midnight-Snacker/src/main/java/com/example/Midnight/Snacker/web/dto/CalendarDTO/CalendarResponseDTO.java +++ b/Midnight-Snacker/src/main/java/com/example/Midnight/Snacker/web/dto/CalendarDTO/CalendarResponseDTO.java @@ -1,5 +1,7 @@ package com.example.Midnight.Snacker.web.dto.CalendarDTO; +import com.example.Midnight.Snacker.domain.enums.CategoryE; +import com.example.Midnight.Snacker.domain.enums.Color; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; @@ -8,12 +10,40 @@ import java.time.LocalDate; import java.util.List; -@Getter -@Setter -@AllArgsConstructor -@NoArgsConstructor + public class CalendarResponseDTO { - private int blackCount; - private int whiteCount; - private List calendarInfoDTOS; + + private List dailyRecords; + @Getter + @Setter + @AllArgsConstructor + @NoArgsConstructor + public static class CalendarResponseDailyDTO { + private Color color; + private String ImgUrl; + private String foodName; + private CategoryE category; + private Long foodId; + + } + + @Getter + @Setter + @AllArgsConstructor + @NoArgsConstructor + public static class CalendarResponseMonthlyListDTO { + private int blackCount; + private int whiteCount; + private List calendarInfoDTOS; + } + + @Getter + @Setter + @AllArgsConstructor + @NoArgsConstructor + public static class CalendarResponseMonthlyDTO { + private LocalDate date; + private Color color; + + } }