diff --git a/src/main/java/com/assu/server/domain/partnership/converter/PartnershipConverter.java b/src/main/java/com/assu/server/domain/partnership/converter/PartnershipConverter.java index 011bfd8..4adbe94 100644 --- a/src/main/java/com/assu/server/domain/partnership/converter/PartnershipConverter.java +++ b/src/main/java/com/assu/server/domain/partnership/converter/PartnershipConverter.java @@ -1,8 +1,10 @@ package com.assu.server.domain.partnership.converter; import java.time.LocalDate; -import java.util.List; +import java.time.LocalDateTime; +import java.util.*; +import com.assu.server.domain.common.entity.BaseEntity; import com.assu.server.domain.partnership.dto.PaperContentResponseDTO; import com.assu.server.domain.admin.entity.Admin; import com.assu.server.domain.common.enums.ActivationStatus; @@ -18,9 +20,6 @@ import com.assu.server.domain.user.entity.Student; import com.assu.server.domain.store.entity.Store; -import java.util.ArrayList; -import java.util.Collections; - public class PartnershipConverter { public static PartnershipUsage toPartnershipUsage(PartnershipRequestDTO.finalRequest dto, Student student, Long paperId) { @@ -295,12 +294,56 @@ public static PartnershipResponseDTO.GetPartnershipDetailResponseDTO getPartners List contents, List> goodsBatches ) { - PartnershipResponseDTO.WritePartnershipResponseDTO responseInfo = - writePartnershipResultDTO(paper, contents, goodsBatches); + List allTimestamps = new ArrayList<>(); + + if (paper.getUpdatedAt() != null) allTimestamps.add(paper.getUpdatedAt()); + if (contents != null) { + contents.stream() + .map(BaseEntity::getUpdatedAt) + .filter(Objects::nonNull) + .forEach(allTimestamps::add); + } + if (goodsBatches != null) { + goodsBatches.stream() + .flatMap(List::stream) + .map(BaseEntity::getUpdatedAt) + .filter(Objects::nonNull) + .forEach(allTimestamps::add); + } + + LocalDateTime mostRecentUpdatedAt = allTimestamps.stream() + .max(Comparator.naturalOrder()) + .orElse(paper.getUpdatedAt()); + + List optionDTOS = new ArrayList<>(); + if (contents != null) { + for (int i = 0; i < contents.size(); i++) { + PaperContent pc = contents.get(i); + List goods = (goodsBatches != null && goodsBatches.size() > i) + ? goodsBatches.get(i) : List.of(); + optionDTOS.add( + PartnershipResponseDTO.PartnershipOptionResponseDTO.builder() + .optionType(pc.getOptionType()) + .criterionType(pc.getCriterionType()) + .people(pc.getPeople()) + .cost(pc.getCost()) + .category(pc.getCategory()) + .discountRate(pc.getDiscount()) + .goods(goodsResultDTO(goods)) + .build() + ); + } + } return PartnershipResponseDTO.GetPartnershipDetailResponseDTO.builder() - .updatedAt(paper.getUpdatedAt()) // UpdatedAt 값 가져오기 - .responseInfo(responseInfo) // 상세정보 DTO 설정 + .partnershipId(paper.getId()) + .updatedAt(mostRecentUpdatedAt) // 가장 최근 UpdatedAt 값 가져오기 + .partnershipPeriodStart(paper.getPartnershipPeriodStart()) + .partnershipPeriodEnd(paper.getPartnershipPeriodEnd()) + .adminId(paper.getAdmin() != null ? paper.getAdmin().getId() : null) + .partnerId(paper.getPartner()!= null ? paper.getPartner().getId() : null) // 수동등록이면 null + .storeId(paper.getStore() != null ? paper.getStore().getId() : null) + .options(optionDTOS) .build(); } } diff --git a/src/main/java/com/assu/server/domain/partnership/dto/PartnershipResponseDTO.java b/src/main/java/com/assu/server/domain/partnership/dto/PartnershipResponseDTO.java index 4e34933..35ac7ae 100644 --- a/src/main/java/com/assu/server/domain/partnership/dto/PartnershipResponseDTO.java +++ b/src/main/java/com/assu/server/domain/partnership/dto/PartnershipResponseDTO.java @@ -26,7 +26,6 @@ public static class WritePartnershipResponseDTO { private Long storeId; private String storeName; private String adminName; - private Boolean activated; private ActivationStatus isActivated; private List options; } @@ -135,7 +134,13 @@ public static class PartnerPartnershipWithAdminResponseDTO { @AllArgsConstructor @Builder public static class GetPartnershipDetailResponseDTO { + private Long partnershipId; private LocalDateTime updatedAt; - private WritePartnershipResponseDTO responseInfo; + private LocalDate partnershipPeriodStart; + private LocalDate partnershipPeriodEnd; + private Long adminId; + private Long partnerId; + private Long storeId; + private List options; } } diff --git a/src/main/java/com/assu/server/domain/partnership/entity/Goods.java b/src/main/java/com/assu/server/domain/partnership/entity/Goods.java index c63571d..9a2da2a 100644 --- a/src/main/java/com/assu/server/domain/partnership/entity/Goods.java +++ b/src/main/java/com/assu/server/domain/partnership/entity/Goods.java @@ -1,5 +1,6 @@ package com.assu.server.domain.partnership.entity; +import com.assu.server.domain.common.entity.BaseEntity; import jakarta.persistence.Entity; import jakarta.persistence.FetchType; import jakarta.persistence.GeneratedValue; @@ -19,7 +20,7 @@ @NoArgsConstructor @Builder @AllArgsConstructor -public class Goods { +public class Goods extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id;