diff --git a/src/main/java/com/petlog/diary/controller/DiaryController.java b/src/main/java/com/petlog/diary/controller/DiaryController.java index b7eab4c..37b52c1 100644 --- a/src/main/java/com/petlog/diary/controller/DiaryController.java +++ b/src/main/java/com/petlog/diary/controller/DiaryController.java @@ -8,6 +8,7 @@ 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.GetDiaryDto; import com.petlog.diary.service.dto.GetDiaryInfoDto; import com.petlog.docs.DiaryControllerDocs; import lombok.RequiredArgsConstructor; @@ -21,7 +22,6 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import java.time.LocalDate; import java.util.List; import static com.petlog.diary.controller.DiarySuccessCode.CREATE_DIARY; @@ -71,10 +71,18 @@ public ResponseEntity> getAllDiary( @GetMapping("/{diaryId}") public ResponseEntity> getDiary( + @Authenticated final Long memberId, @PathVariable final Long groupId, @PathVariable final Long diaryId ) { - final GetDiaryResponseDto response = new GetDiaryResponseDto("제목", "내용", List.of("이미지"), LocalDate.now(), "서은"); + final GetDiaryDto dto = diaryService.getDiary(memberId, groupId, diaryId); + final GetDiaryResponseDto response = new GetDiaryResponseDto( + dto.title(), + dto.content(), + dto.images(), + dto.writtenAt(), + dto.writerName() + ); return ResponseEntity.ok( ApiResponse.successWithData(GET_DIARY, response) diff --git a/src/main/java/com/petlog/diary/controller/dto/response/GetDiaryResponseDto.java b/src/main/java/com/petlog/diary/controller/dto/response/GetDiaryResponseDto.java index 994198f..4715a62 100644 --- a/src/main/java/com/petlog/diary/controller/dto/response/GetDiaryResponseDto.java +++ b/src/main/java/com/petlog/diary/controller/dto/response/GetDiaryResponseDto.java @@ -1,6 +1,8 @@ package com.petlog.diary.controller.dto.response; +import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema; +import org.springframework.format.annotation.DateTimeFormat; import java.time.LocalDate; import java.util.List; @@ -16,22 +18,11 @@ public record GetDiaryResponseDto( @Schema(description = "0~6장") List images, + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy.MM.dd") + @DateTimeFormat(pattern = "yyyy.MM.dd") LocalDate writtenAt, String writerName ) { - public GetDiaryResponseDto( - final String title, - final String content, - final List images, - final LocalDate writtenAt, - final String writerName - ) { - this.title = title; - this.content = content; - this.images = images; - this.writtenAt = writtenAt; - this.writerName = writerName; - } } diff --git a/src/main/java/com/petlog/diary/service/DiaryService.java b/src/main/java/com/petlog/diary/service/DiaryService.java index f7136ec..6332ec6 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.GetDiaryDto; import com.petlog.diary.service.dto.GetDiaryInfoDto; import com.petlog.member.entity.Member; import com.petlog.member.repository.MemberRepository; @@ -64,6 +65,7 @@ private PetGroupMember getPetGroupMember(final Member member, final PetGroup pet .orElseThrow(() -> new IllegalArgumentException("그룹에 존재하지 않는 회원입니다.")); } + @Transactional(readOnly = true) public List getAllDiaries(final Long memberId, final Long groupId) { final Member member = getMember(memberId); final PetGroup petGroup = getPetGroup(groupId); @@ -83,4 +85,27 @@ public List getAllDiaries(final Long memberId, final Long group )) .toList(); } + + public GetDiaryDto getDiary(final Long memberId, final Long groupId, final Long diaryId) { + final Member member = getMember(memberId); + final PetGroup petGroup = getPetGroup(groupId); + getPetGroupMember(member, petGroup); + + final Diary diary = getDiaryDetail(diaryId); + + return new GetDiaryDto( + diary.getTitle(), + diary.getContent(), + diary.getImages().stream() + .map(DiaryImage::getImageUrl) + .toList(), + diary.getWrittenAt(), + diary.getMember().getName() + ); + } + + private Diary getDiaryDetail(final Long diaryId) { + return diaryRepository.findById(diaryId) + .orElseThrow(() -> new IllegalArgumentException("존재하지 않는 일기입니다.")); + } } diff --git a/src/main/java/com/petlog/diary/service/dto/GetDailyDiaryDto.java b/src/main/java/com/petlog/diary/service/dto/GetDailyDiaryDto.java index 6528593..0eb9775 100644 --- a/src/main/java/com/petlog/diary/service/dto/GetDailyDiaryDto.java +++ b/src/main/java/com/petlog/diary/service/dto/GetDailyDiaryDto.java @@ -1,19 +1,17 @@ package com.petlog.diary.service.dto; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; + import java.time.LocalDate; import java.util.List; public record GetDailyDiaryDto( + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy.MM.dd") + @DateTimeFormat(pattern = "yyyy.MM.dd") LocalDate writtenAt, List diaryInfo ) { - public GetDailyDiaryDto( - final LocalDate writtenAt, - final List diaryInfo - ) { - this.writtenAt = writtenAt; - this.diaryInfo = diaryInfo; - } } diff --git a/src/main/java/com/petlog/diary/service/dto/GetDiaryDto.java b/src/main/java/com/petlog/diary/service/dto/GetDiaryDto.java new file mode 100644 index 0000000..f681e86 --- /dev/null +++ b/src/main/java/com/petlog/diary/service/dto/GetDiaryDto.java @@ -0,0 +1,15 @@ +package com.petlog.diary.service.dto; + +import java.time.LocalDate; +import java.util.List; + +public record GetDiaryDto( + + String title, + String content, + List images, + LocalDate writtenAt, + String writerName + +) { +} 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 0e9501a..e57d721 100644 --- a/src/main/java/com/petlog/diary/service/dto/GetDiaryInfoDto.java +++ b/src/main/java/com/petlog/diary/service/dto/GetDiaryInfoDto.java @@ -1,5 +1,6 @@ package com.petlog.diary.service.dto; +import com.fasterxml.jackson.annotation.JsonIgnore; import io.swagger.v3.oas.annotations.media.Schema; import java.time.LocalDate; @@ -13,6 +14,7 @@ public record GetDiaryInfoDto( String image, + @JsonIgnore LocalDate writtenAt ) { diff --git a/src/main/java/com/petlog/docs/DiaryControllerDocs.java b/src/main/java/com/petlog/docs/DiaryControllerDocs.java index a1c21f2..70309ca 100644 --- a/src/main/java/com/petlog/docs/DiaryControllerDocs.java +++ b/src/main/java/com/petlog/docs/DiaryControllerDocs.java @@ -25,7 +25,7 @@ public interface DiaryControllerDocs { @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "200", description = "일기 상세 조회에 성공하였습니다.") @Operation(summary = "일기 상세 조회 API") - ResponseEntity> getDiary(@PathVariable final Long groupId, @PathVariable final Long diaryId); + ResponseEntity> getDiary(@Authenticated final Long memberId, @PathVariable final Long groupId, @PathVariable final Long diaryId); @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "200", description = "일기 상세 내용 수정에 성공하였습니다.") @Operation(summary = "일기 상세 내용 수정 API")