diff --git a/src/main/java/com/movelog/domain/record/dto/response/Recent5RecordImagesRes.java b/src/main/java/com/movelog/domain/record/dto/response/Recent5RecordImagesRes.java new file mode 100644 index 0000000..02baa68 --- /dev/null +++ b/src/main/java/com/movelog/domain/record/dto/response/Recent5RecordImagesRes.java @@ -0,0 +1,17 @@ +package com.movelog.domain.record.dto.response; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Getter +public class Recent5RecordImagesRes { + + @Schema( type = "String", example ="https://movelog.com/record/1/image/1", description="최근 5개의 기록 이미지 URL") + private String imageUrl; +} diff --git a/src/main/java/com/movelog/domain/record/presentation/RecordController.java b/src/main/java/com/movelog/domain/record/presentation/RecordController.java index 53668f3..50a7c53 100644 --- a/src/main/java/com/movelog/domain/record/presentation/RecordController.java +++ b/src/main/java/com/movelog/domain/record/presentation/RecordController.java @@ -3,10 +3,7 @@ import com.movelog.domain.news.dto.response.NewsCalendarRes; import com.movelog.domain.record.dto.request.CreateRecordReq; import com.movelog.domain.record.dto.request.SearchKeywordReq; -import com.movelog.domain.record.dto.response.RecentRecordImagesRes; -import com.movelog.domain.record.dto.response.RecordCalendarRes; -import com.movelog.domain.record.dto.response.SearchKeywordRes; -import com.movelog.domain.record.dto.response.TodayRecordStatus; +import com.movelog.domain.record.dto.response.*; import com.movelog.domain.record.service.RecordService; import com.movelog.global.config.security.token.UserPrincipal; import com.movelog.global.payload.Message; @@ -125,4 +122,22 @@ public ResponseEntity getRecordByDate( } + @Operation(summary = "사용자 기록 이미지 중 최신 5개 목록 조회 API", description = "사용자가 생성한 기록 이미지 중 최신 5개 목록을 조회하는 API입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "최신 5개 기록 이미지 목록 조회 성공", + content = @Content(mediaType = "application/json", + schema = @Schema(type = "array", implementation = Recent5RecordImagesRes.class))), + @ApiResponse(responseCode = "400", description = "최신 5개 기록 이미지 목록 조회 실패", + content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorResponse.class))) + }) + @GetMapping("/current") + public ResponseEntity retrieveCurrentRecordImages( + @Parameter(description = "User의 토큰을 입력해주세요.", required = true) @AuthenticationPrincipal UserPrincipal userPrincipal + ) { + List result = recordService.retrieveCurrentRecordImages(userPrincipal); + return ResponseEntity.ok(ApiResponseUtil.success(result)); + } + + + } diff --git a/src/main/java/com/movelog/domain/record/repository/RecordRepository.java b/src/main/java/com/movelog/domain/record/repository/RecordRepository.java index c440f0a..01f978b 100644 --- a/src/main/java/com/movelog/domain/record/repository/RecordRepository.java +++ b/src/main/java/com/movelog/domain/record/repository/RecordRepository.java @@ -25,4 +25,10 @@ public interface RecordRepository extends JpaRepository { "AND r.actionTime BETWEEN :start AND :end " + "ORDER BY r.actionTime ASC") Page findRecordByUserAndCreatedAtBetween(User user, LocalDateTime start, LocalDateTime end, Pageable pageable); + + + // 사용자가 등록한 기록 중 가장 최근 5개의 기록을 조회, 이미지가 있는 경우만 조회 + // 5개의 기록만 조회 + List findTop5ByKeywordUserAndRecordImageNotNullOrderByActionTimeDesc(User user); + } diff --git a/src/main/java/com/movelog/domain/record/service/RecordService.java b/src/main/java/com/movelog/domain/record/service/RecordService.java index ca2572d..7a5c454 100644 --- a/src/main/java/com/movelog/domain/record/service/RecordService.java +++ b/src/main/java/com/movelog/domain/record/service/RecordService.java @@ -7,10 +7,7 @@ import com.movelog.domain.record.domain.VerbType; import com.movelog.domain.record.dto.request.CreateRecordReq; import com.movelog.domain.record.dto.request.SearchKeywordReq; -import com.movelog.domain.record.dto.response.RecentRecordImagesRes; -import com.movelog.domain.record.dto.response.RecordCalendarRes; -import com.movelog.domain.record.dto.response.SearchKeywordRes; -import com.movelog.domain.record.dto.response.TodayRecordStatus; +import com.movelog.domain.record.dto.response.*; import com.movelog.domain.record.repository.KeywordRepository; import com.movelog.domain.record.repository.RecordRepository; import com.movelog.domain.user.application.UserService; @@ -190,6 +187,19 @@ public Page getRecordByDate(UserPrincipal userPrincipal, Stri } + public List retrieveCurrentRecordImages(UserPrincipal userPrincipal) { + User user = validUserById(userPrincipal); + // User user = userRepository.findById(5L).orElseThrow(UserNotFoundException::new); + + List records = recordRepository.findTop5ByKeywordUserAndRecordImageNotNullOrderByActionTimeDesc(user); + + return records.stream() + .map(record -> Recent5RecordImagesRes.builder() + .imageUrl((record.getRecordImage())) + .build()) + .toList(); + } + private User validUserById(UserPrincipal userPrincipal) { Optional userOptional = userService.findById(userPrincipal.getId());