From 6ffd752860daf14aa82831058fc16ba8a94ff5ec Mon Sep 17 00:00:00 2001 From: kanghana1 Date: Fri, 6 Feb 2026 21:34:17 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EB=8C=80=ED=9A=8C=20=EC=83=81=EC=84=B8?= =?UTF-8?q?=20=EC=A1=B0=ED=9A=8C=EC=8B=9C=20=EC=9D=B4=EB=AF=B8=EC=A7=80,?= =?UTF-8?q?=20=EB=B9=84=EB=94=94=EC=98=A4=20id=20=EA=B0=99=EC=9D=B4=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../contest/converter/ContestConverter.java | 4 +++- .../contest/dto/ContestRecordDetailDTO.java | 2 ++ .../service/ContestQueryServiceImpl.java | 23 ++++++++++++++++++- 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/main/java/umc/cockple/demo/domain/contest/converter/ContestConverter.java b/src/main/java/umc/cockple/demo/domain/contest/converter/ContestConverter.java index d62b1fe3..b1e04db7 100644 --- a/src/main/java/umc/cockple/demo/domain/contest/converter/ContestConverter.java +++ b/src/main/java/umc/cockple/demo/domain/contest/converter/ContestConverter.java @@ -77,7 +77,7 @@ public ContestRecordDeleteDTO.Response toDeleteResponseDTO(Contest contest) { } // 대회 기록 상세 조회 - public ContestRecordDetailDTO.Response toDetailResponseDTO(Contest contest, List imgUrls, List videoUrls, String content) { + public ContestRecordDetailDTO.Response toDetailResponseDTO(Contest contest, List imgIds, List imgUrls, List videoIds, List videoUrls, String content) { return ContestRecordDetailDTO.Response.builder() .contestId(contest.getId()) .contestName(contest.getContestName()) @@ -87,8 +87,10 @@ public ContestRecordDetailDTO.Response toDetailResponseDTO(Contest contest, List .level(contest.getLevel()) .contentIsOpen(contest.getContentIsOpen()) .content(content) + .contestImgIds(imgIds) .contestImgUrls(imgUrls) .videoIsOpen(contest.getVideoIsOpen()) + .contestVideoIds(videoIds) .contestVideoUrls(videoUrls) .build(); } diff --git a/src/main/java/umc/cockple/demo/domain/contest/dto/ContestRecordDetailDTO.java b/src/main/java/umc/cockple/demo/domain/contest/dto/ContestRecordDetailDTO.java index 6e4dad7c..3b4b9dbf 100644 --- a/src/main/java/umc/cockple/demo/domain/contest/dto/ContestRecordDetailDTO.java +++ b/src/main/java/umc/cockple/demo/domain/contest/dto/ContestRecordDetailDTO.java @@ -21,7 +21,9 @@ public record Response( String content, Boolean contentIsOpen, Boolean videoIsOpen, + List contestImgIds, List contestImgUrls, + List contestVideoIds, List contestVideoUrls ) { } diff --git a/src/main/java/umc/cockple/demo/domain/contest/service/ContestQueryServiceImpl.java b/src/main/java/umc/cockple/demo/domain/contest/service/ContestQueryServiceImpl.java index 29a37c18..89039027 100644 --- a/src/main/java/umc/cockple/demo/domain/contest/service/ContestQueryServiceImpl.java +++ b/src/main/java/umc/cockple/demo/domain/contest/service/ContestQueryServiceImpl.java @@ -40,13 +40,15 @@ public ContestRecordDetailDTO.Response getContestRecordDetail(Long loginMemberId boolean isOwner = loginMemberId.equals(memberId); + List imgIds = getImageIds(contest); List imgUrls = getImageUrls(contest); + List videoIds = getVideoIds(contest, isOwner); List videoUrls = getVideoUrls(contest, isOwner); String content = getContent(contest, isOwner); log.info("대회 기록 상세조회 완료 - contestId: {}", contestId); - return contestConverter.toDetailResponseDTO(contest, imgUrls, videoUrls, content); + return contestConverter.toDetailResponseDTO(contest, imgIds, imgUrls, videoIds, videoUrls, content); } // 대회 기록 리스트 조회 (전체, 미입상) @@ -92,6 +94,14 @@ public ContestMedalSummaryDTO.Response getMyMedalSummary(Long memberId) { return contestConverter.toMedalSummaryResponseDTO(gold, silver, bronze); } + // 이미지 ID 리스트 반환 + private List getImageIds(Contest contest) { + return contest.getContestImgs().stream() + .sorted(Comparator.comparing(ContestImg::getImgOrder)) + .map(ContestImg::getId) + .collect(Collectors.toList()); + } + // 이미지 URL 리스트 반환 private List getImageUrls(Contest contest) { return contest.getContestImgs().stream() @@ -100,6 +110,17 @@ private List getImageUrls(Contest contest) { .collect(Collectors.toList()); } + // 영상 ID 리스트 (공개 여부에 따라) + private List getVideoIds(Contest contest, boolean isOwner) { + if (contest.getVideoIsOpen() || isOwner) { + return contest.getContestVideos().stream() + .sorted(Comparator.comparingInt(ContestVideo::getVideoOrder)) + .map(ContestVideo::getId) + .collect(Collectors.toList()); + } + return List.of(); + } + // 영상 URL 리스트 (공개 여부에 따라) private List getVideoUrls(Contest contest, boolean isOwner) { if (contest.getVideoIsOpen() || isOwner) {