diff --git a/src/main/java/com/petlog/diary/controller/DiaryController.java b/src/main/java/com/petlog/diary/controller/DiaryController.java index 73c76da..b7eab4c 100644 --- a/src/main/java/com/petlog/diary/controller/DiaryController.java +++ b/src/main/java/com/petlog/diary/controller/DiaryController.java @@ -8,7 +8,6 @@ import com.petlog.diary.controller.dto.response.GetDiaryResponseDto; import com.petlog.diary.service.DiaryService; import com.petlog.diary.service.dto.CreateDiaryDto; -import com.petlog.diary.service.dto.GetDailyDiaryDto; import com.petlog.diary.service.dto.GetDiaryInfoDto; import com.petlog.docs.DiaryControllerDocs; import lombok.RequiredArgsConstructor; @@ -59,18 +58,11 @@ public ResponseEntity> createDiary( @GetMapping public ResponseEntity> getAllDiary( + @Authenticated final Long memberId, @PathVariable final Long groupId ) { - final List dailyDiary1 = List.of( - new GetDiaryInfoDto(1L, "잠자는 아이", "https://잠자는 여름이.png"), - new GetDiaryInfoDto(2L, "날뛰는 아이", "https://날뛰는 여름이.png") - ); - - final GetDailyDiaryDto dailyDiary = new GetDailyDiaryDto(LocalDate.now(), dailyDiary1); - - final List allDailyDiary = List.of(dailyDiary); - - final GetAllDiaryResponseDto allDiary = new GetAllDiaryResponseDto(allDailyDiary); + final List diaries = diaryService.getAllDiaries(memberId, groupId); + final GetAllDiaryResponseDto allDiary = GetAllDiaryResponseDto.from(diaries); return ResponseEntity.ok( ApiResponse.successWithData(GET_ALL_DIARY, allDiary) diff --git a/src/main/java/com/petlog/diary/controller/dto/response/GetAllDiaryResponseDto.java b/src/main/java/com/petlog/diary/controller/dto/response/GetAllDiaryResponseDto.java index abd69b3..3eabb34 100644 --- a/src/main/java/com/petlog/diary/controller/dto/response/GetAllDiaryResponseDto.java +++ b/src/main/java/com/petlog/diary/controller/dto/response/GetAllDiaryResponseDto.java @@ -1,15 +1,34 @@ package com.petlog.diary.controller.dto.response; import com.petlog.diary.service.dto.GetDailyDiaryDto; +import com.petlog.diary.service.dto.GetDiaryInfoDto; +import java.util.Comparator; import java.util.List; +import java.util.stream.Collectors; public record GetAllDiaryResponseDto( - List allDiary + List diary ) { - public GetAllDiaryResponseDto(final List allDiary) { - this.allDiary = allDiary; + + public static GetAllDiaryResponseDto from(List diaryList) { + + List grouped = + diaryList.stream() + .collect(Collectors.groupingBy(GetDiaryInfoDto::writtenAt)) + .entrySet() + .stream() + .map(entry -> + new GetDailyDiaryDto( + entry.getKey(), + entry.getValue() + ) + ) + .sorted(Comparator.comparing(GetDailyDiaryDto::writtenAt).reversed()) + .toList(); + + return new GetAllDiaryResponseDto(grouped); } } diff --git a/src/main/java/com/petlog/diary/repository/DiaryRepository.java b/src/main/java/com/petlog/diary/repository/DiaryRepository.java index 7638c68..c1b54fc 100644 --- a/src/main/java/com/petlog/diary/repository/DiaryRepository.java +++ b/src/main/java/com/petlog/diary/repository/DiaryRepository.java @@ -1,7 +1,12 @@ package com.petlog.diary.repository; import com.petlog.diary.entity.Diary; +import com.petlog.petgroup.entity.PetGroup; import org.springframework.data.jpa.repository.JpaRepository; +import java.util.List; + public interface DiaryRepository extends JpaRepository { + + List findAllByPetGroup(PetGroup petGroup); } diff --git a/src/main/java/com/petlog/diary/service/DiaryService.java b/src/main/java/com/petlog/diary/service/DiaryService.java index b6ab88f..f7136ec 100644 --- a/src/main/java/com/petlog/diary/service/DiaryService.java +++ b/src/main/java/com/petlog/diary/service/DiaryService.java @@ -5,6 +5,7 @@ import com.petlog.diary.repository.DiaryImageRepository; import com.petlog.diary.repository.DiaryRepository; import com.petlog.diary.service.dto.CreateDiaryDto; +import com.petlog.diary.service.dto.GetDiaryInfoDto; import com.petlog.member.entity.Member; import com.petlog.member.repository.MemberRepository; import com.petlog.petgroup.entity.PetGroup; @@ -62,4 +63,24 @@ private PetGroupMember getPetGroupMember(final Member member, final PetGroup pet return petGroupMemberRepository.findByMemberAndPetGroup(member, petGroup) .orElseThrow(() -> new IllegalArgumentException("그룹에 존재하지 않는 회원입니다.")); } + + public List getAllDiaries(final Long memberId, final Long groupId) { + final Member member = getMember(memberId); + final PetGroup petGroup = getPetGroup(groupId); + getPetGroupMember(member, petGroup); + + final List diaries = diaryRepository.findAllByPetGroup(petGroup); + + return diaries.stream() + .map(info -> new GetDiaryInfoDto( + info.getId(), + info.getTitle(), + info.getImages().stream() + .findFirst() + .map(DiaryImage::getImageUrl) + .orElse(null), + info.getWrittenAt() + )) + .toList(); + } } diff --git a/src/main/java/com/petlog/diary/service/dto/GetDiaryInfoDto.java b/src/main/java/com/petlog/diary/service/dto/GetDiaryInfoDto.java index 89c3eb5..0e9501a 100644 --- a/src/main/java/com/petlog/diary/service/dto/GetDiaryInfoDto.java +++ b/src/main/java/com/petlog/diary/service/dto/GetDiaryInfoDto.java @@ -2,6 +2,8 @@ import io.swagger.v3.oas.annotations.media.Schema; +import java.time.LocalDate; + public record GetDiaryInfoDto( Long diaryId, @@ -9,16 +11,9 @@ public record GetDiaryInfoDto( @Schema(description = "10글자 제한") String title, - String image + String image, + + LocalDate writtenAt ) { - public GetDiaryInfoDto( - final Long diaryId, - final String title, - final String image - ) { - this.diaryId = diaryId; - this.title = title; - this.image = image; - } } diff --git a/src/main/java/com/petlog/docs/DiaryControllerDocs.java b/src/main/java/com/petlog/docs/DiaryControllerDocs.java index c054676..a1c21f2 100644 --- a/src/main/java/com/petlog/docs/DiaryControllerDocs.java +++ b/src/main/java/com/petlog/docs/DiaryControllerDocs.java @@ -21,7 +21,7 @@ public interface DiaryControllerDocs { @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "200", description = "일기 전체 조회에 성공하였습니다.") @Operation(summary = "일기 전체 조회 API") - ResponseEntity> getAllDiary(@PathVariable final Long groupId); + ResponseEntity> getAllDiary(@Authenticated final Long memberId, @PathVariable final Long groupId); @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "200", description = "일기 상세 조회에 성공하였습니다.") @Operation(summary = "일기 상세 조회 API")