diff --git a/src/main/java/com/example/RealMatch/campaign/application/service/CampaignQueryService.java b/src/main/java/com/example/RealMatch/campaign/application/service/CampaignQueryService.java index 0600689b..3015a217 100644 --- a/src/main/java/com/example/RealMatch/campaign/application/service/CampaignQueryService.java +++ b/src/main/java/com/example/RealMatch/campaign/application/service/CampaignQueryService.java @@ -1,5 +1,7 @@ package com.example.RealMatch.campaign.application.service; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.List; import org.springframework.stereotype.Service; @@ -40,6 +42,7 @@ public CampaignDetailResponse getCampaignDetail(Long userId, Long campaignId) { String imageUrl = attachmentUrlService.getAccessUrl(campaign.getImageUrl()); - return CampaignDetailResponse.from(campaign, imageUrl, isLike, tags); + LocalDate today = LocalDate.now(ZoneId.of("Asia/Seoul")); + return CampaignDetailResponse.from(campaign, imageUrl, isLike, today, tags); } } diff --git a/src/main/java/com/example/RealMatch/campaign/presentation/controller/CampaignController.java b/src/main/java/com/example/RealMatch/campaign/presentation/controller/CampaignController.java index 441dda9b..ba0d41be 100644 --- a/src/main/java/com/example/RealMatch/campaign/presentation/controller/CampaignController.java +++ b/src/main/java/com/example/RealMatch/campaign/presentation/controller/CampaignController.java @@ -31,6 +31,9 @@ public class CampaignController { description = """ 캠페인 상세 정보를 조회합니다. + * dday가 -1인 것은 dday가 지난 상태를 말합니다. + * 카테고리는 브랜드의 카테고리를 따라갑니다. (데모데이 이후 캠페인 카테고리로 수정 예정) + formats : 형식, categories : 종류, tones : 톤, diff --git a/src/main/java/com/example/RealMatch/campaign/presentation/dto/response/CampaignDetailResponse.java b/src/main/java/com/example/RealMatch/campaign/presentation/dto/response/CampaignDetailResponse.java index 90b56668..97d23f68 100644 --- a/src/main/java/com/example/RealMatch/campaign/presentation/dto/response/CampaignDetailResponse.java +++ b/src/main/java/com/example/RealMatch/campaign/presentation/dto/response/CampaignDetailResponse.java @@ -2,11 +2,13 @@ import java.time.LocalDate; import java.time.LocalDateTime; +import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.EnumMap; import java.util.List; import java.util.Map; +import com.example.RealMatch.brand.domain.entity.enums.IndustryType; import com.example.RealMatch.campaign.domain.entity.Campaign; import com.example.RealMatch.campaign.domain.entity.CampaignContentTag; import com.example.RealMatch.tag.domain.enums.ContentTagType; @@ -19,10 +21,11 @@ @Builder public class CampaignDetailResponse { - private Long campaignId; + private Long campaignId; private String title; private String description; private String imageUrl; + private IndustryType category; private String preferredSkills; private String schedule; @@ -42,6 +45,7 @@ public class CampaignDetailResponse { private LocalDateTime recruitStartDate; private LocalDateTime recruitEndDate; + private int dday; private Integer quota; @@ -51,13 +55,19 @@ public static CampaignDetailResponse from( Campaign campaign, String imageUrl, boolean isLike, + LocalDate today, List tags ) { + int dday = (int) ChronoUnit.DAYS.between( + today, campaign.getRecruitEndDate().toLocalDate() + ); + return CampaignDetailResponse.builder() .campaignId(campaign.getId()) .title(campaign.getTitle()) .description(campaign.getDescription()) .imageUrl(imageUrl) + .category(campaign.getBrand().getIndustryType()) .preferredSkills(campaign.getPreferredSkills()) .schedule(campaign.getSchedule()) .videoSpec(campaign.getVideoSpec()) @@ -68,6 +78,7 @@ public static CampaignDetailResponse from( .endDate(campaign.getEndDate()) .recruitStartDate(campaign.getRecruitStartDate()) .recruitEndDate(campaign.getRecruitEndDate()) + .dday(Math.max(dday, -1)) .quota(campaign.getQuota()) .contentTags(toContentTagResponse(tags)) .build();