diff --git a/src/main/java/com/midas/shootpointer/domain/highlight/business/HighlightManager.java b/src/main/java/com/midas/shootpointer/domain/highlight/business/HighlightManager.java index 0f5475f8..ce61a103 100644 --- a/src/main/java/com/midas/shootpointer/domain/highlight/business/HighlightManager.java +++ b/src/main/java/com/midas/shootpointer/domain/highlight/business/HighlightManager.java @@ -61,7 +61,14 @@ public void saveHighlights(HighlightRequest request, UUID memberId) { /* * 2. 하이라이트 엔티티 생성 */ - List entities=factory.createHighlightEntities(request.getHighlightUrls(),request.getHighlightIdentifier(),member,backNumber,request.getCreatedAt()); + List entities=factory.createHighlightEntities( + request.getHighlightUrls(), + request.getHighlightIdentifier(), + member, + backNumber, + request.getCreatedAt(), + request.getJobId() + ); /* 3. DB 저장 @@ -114,4 +121,12 @@ public HighlightCalendarResponse fetchCalendar(int year, int month,UUID memberId return new HighlightCalendarResponse(year,month,daysResponses); } + + public List fetchLatestCreatedHighlights(UUID jobId,UUID memberId){ + List highlightList=highlightHelper.fetchLastestCreatedHighlights(jobId,memberId); + + return highlightList.stream() + .map(mapper::infoResponseToEntity) + .toList(); + } } diff --git a/src/main/java/com/midas/shootpointer/domain/highlight/controller/HighlightQueryController.java b/src/main/java/com/midas/shootpointer/domain/highlight/controller/HighlightQueryController.java index af481997..c352ade2 100644 --- a/src/main/java/com/midas/shootpointer/domain/highlight/controller/HighlightQueryController.java +++ b/src/main/java/com/midas/shootpointer/domain/highlight/controller/HighlightQueryController.java @@ -54,4 +54,12 @@ public ResponseEntity> fetchCalendar( UUID memberId=SecurityUtils.getCurrentMemberId(); return ResponseEntity.ok(ApiResponse.ok(manager.fetchCalendar(year,month,memberId))); } + + @GetMapping("/latest") + public ResponseEntity>> latestCreatedHighlights( + @RequestParam(value = "jobId") UUID jobId + ){ + UUID memberId=SecurityUtils.getCurrentMemberId(); + return ResponseEntity.ok(ApiResponse.ok(manager.fetchLatestCreatedHighlights(jobId,memberId))); + } } diff --git a/src/main/java/com/midas/shootpointer/domain/highlight/dto/HighlightRequest.java b/src/main/java/com/midas/shootpointer/domain/highlight/dto/HighlightRequest.java index ee432755..327ceb03 100644 --- a/src/main/java/com/midas/shootpointer/domain/highlight/dto/HighlightRequest.java +++ b/src/main/java/com/midas/shootpointer/domain/highlight/dto/HighlightRequest.java @@ -1,6 +1,7 @@ package com.midas.shootpointer.domain.highlight.dto; import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; @@ -27,4 +28,6 @@ public class HighlightRequest { @NotBlank(message = "하이라이트 생성 날짜는 필수입니다.") private LocalDateTime createdAt; + @NotNull(message = "하이라이트 JobId는 필수입니다.") + private UUID jobId; } diff --git a/src/main/java/com/midas/shootpointer/domain/highlight/entity/HighlightEntity.java b/src/main/java/com/midas/shootpointer/domain/highlight/entity/HighlightEntity.java index 1d1e7e8a..6557b6b3 100644 --- a/src/main/java/com/midas/shootpointer/domain/highlight/entity/HighlightEntity.java +++ b/src/main/java/com/midas/shootpointer/domain/highlight/entity/HighlightEntity.java @@ -4,10 +4,7 @@ import com.midas.shootpointer.domain.member.entity.Member; import com.midas.shootpointer.global.entity.BaseEntity; import jakarta.persistence.*; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; +import lombok.*; import lombok.extern.slf4j.Slf4j; import org.hibernate.annotations.UuidGenerator; @@ -53,6 +50,9 @@ public class HighlightEntity extends BaseEntity { @Column(name = "video_created_at") private LocalDateTime videoCreatedAt; + @Column(name = "job_id",columnDefinition = "uuid") + private UUID jobId; + /* =========== [ 도메인-행위 ] ============== */ diff --git a/src/main/java/com/midas/shootpointer/domain/highlight/helper/HighlightHelperImpl.java b/src/main/java/com/midas/shootpointer/domain/highlight/helper/HighlightHelperImpl.java index 2e413060..8922933c 100644 --- a/src/main/java/com/midas/shootpointer/domain/highlight/helper/HighlightHelperImpl.java +++ b/src/main/java/com/midas/shootpointer/domain/highlight/helper/HighlightHelperImpl.java @@ -67,6 +67,11 @@ public DateTimeRange getMonthDateTimeRange(int year, int month) { return highlightUtil.getMonthDateTimeRange(year,month); } + @Override + public List fetchLastestCreatedHighlights(UUID jobId, UUID memberId) { + return highlightUtil.fetchLastestCreatedHighlights(jobId,memberId); + } + @Override public boolean filesExist(String directory) { return highlightValidator.filesExist(directory); diff --git a/src/main/java/com/midas/shootpointer/domain/highlight/helper/HighlightUtil.java b/src/main/java/com/midas/shootpointer/domain/highlight/helper/HighlightUtil.java index d19b9341..2fa9e856 100644 --- a/src/main/java/com/midas/shootpointer/domain/highlight/helper/HighlightUtil.java +++ b/src/main/java/com/midas/shootpointer/domain/highlight/helper/HighlightUtil.java @@ -24,4 +24,5 @@ public interface HighlightUtil { TreeMap> groupingHighlights(List flatHighlightList); List fetchFlatHighlightList(int year,int month,UUID memberId); DateTimeRange getMonthDateTimeRange(int year, int month); + List fetchLastestCreatedHighlights(UUID jobId,UUID memberId); } diff --git a/src/main/java/com/midas/shootpointer/domain/highlight/helper/HighlightUtilImpl.java b/src/main/java/com/midas/shootpointer/domain/highlight/helper/HighlightUtilImpl.java index 4d3a1e8d..efe4862f 100644 --- a/src/main/java/com/midas/shootpointer/domain/highlight/helper/HighlightUtilImpl.java +++ b/src/main/java/com/midas/shootpointer/domain/highlight/helper/HighlightUtilImpl.java @@ -163,5 +163,10 @@ public DateTimeRange getMonthDateTimeRange(int year, int month) { return new DateTimeRange(start,end); } + @Override + public List fetchLastestCreatedHighlights(UUID jobId, UUID memberId) { + return highlightQueryRepository.fetchHighlightsByJobId(jobId,memberId); + } + } diff --git a/src/main/java/com/midas/shootpointer/domain/highlight/mapper/HighlightFactory.java b/src/main/java/com/midas/shootpointer/domain/highlight/mapper/HighlightFactory.java index 95ddf587..ad8ea67e 100644 --- a/src/main/java/com/midas/shootpointer/domain/highlight/mapper/HighlightFactory.java +++ b/src/main/java/com/midas/shootpointer/domain/highlight/mapper/HighlightFactory.java @@ -21,7 +21,8 @@ public List createHighlightEntities(List highlig UUID key, Member member, BackNumberEntity backNumber, - LocalDateTime createAt + LocalDateTime createAt, + UUID jobId ){ return highlightInfos.stream() .map(info -> HighlightEntity.builder() @@ -32,6 +33,7 @@ public List createHighlightEntities(List highlig .threePointCount(info.threePointCount()) .backNumber(backNumber) .videoCreatedAt(createAt) + .jobId(jobId) .build()) .toList(); } diff --git a/src/main/java/com/midas/shootpointer/domain/highlight/repository/HighlightQueryRepository.java b/src/main/java/com/midas/shootpointer/domain/highlight/repository/HighlightQueryRepository.java index c274194b..62496f1a 100644 --- a/src/main/java/com/midas/shootpointer/domain/highlight/repository/HighlightQueryRepository.java +++ b/src/main/java/com/midas/shootpointer/domain/highlight/repository/HighlightQueryRepository.java @@ -104,6 +104,18 @@ SELECT EXISTS( h.videoCreatedAt ASC """ ) List fetchFlatHighlights(LocalDateTime startDate,LocalDateTime endDate,UUID memberId); + + + @Query(value = """ + SELECT * + FROM + highlight AS h + INNER JOIN + member AS m ON h.member_id = :memberId + WHERE + h.job_id = :jobId + """,nativeQuery = true) + List fetchHighlightsByJobId(UUID jobId,UUID memberId); /** * =========================== *

diff --git a/src/test/java/com/midas/shootpointer/domain/highlight/mapper/HighlightFactoryTest.java b/src/test/java/com/midas/shootpointer/domain/highlight/mapper/HighlightFactoryTest.java index ee743ebe..701a4a94 100644 --- a/src/test/java/com/midas/shootpointer/domain/highlight/mapper/HighlightFactoryTest.java +++ b/src/test/java/com/midas/shootpointer/domain/highlight/mapper/HighlightFactoryTest.java @@ -49,8 +49,10 @@ void createHighlightEntities(){ .backNumber(BackNumber.of(10)) .build(); LocalDateTime now=LocalDateTime.now(); + UUID jobId=UUID.randomUUID(); + //when - List result=factory.createHighlightEntities(highlightInfos,highlightKey,member,backNumber,now); + List result=factory.createHighlightEntities(highlightInfos,highlightKey,member,backNumber,now,jobId); //then