From 4afad865f71f92949b8a049ffcd1d92436aac845 Mon Sep 17 00:00:00 2001 From: ParkJiYeoung8297 Date: Thu, 19 Feb 2026 13:53:15 +0900 Subject: [PATCH 1/2] =?UTF-8?q?fix(#396):=20=EC=BA=A0=ED=8E=98=EC=9D=B8=20?= =?UTF-8?q?=EC=A0=9C=EC=95=88=20=EC=83=81=EC=84=B8=20=EC=A1=B0=ED=9A=8C?= =?UTF-8?q?=EC=97=90=20=EC=A0=9C=ED=92=88=20=EC=9D=B4=EB=A6=84=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BrandAvailableSponsorRepository.java | 4 ++++ .../service/CampaignProposalQueryService.java | 18 +++++++++++++++++- .../CampaignProposalDetailResponse.java | 4 +++- 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/example/RealMatch/brand/domain/repository/BrandAvailableSponsorRepository.java b/src/main/java/com/example/RealMatch/brand/domain/repository/BrandAvailableSponsorRepository.java index b242ea00..e71a50d1 100644 --- a/src/main/java/com/example/RealMatch/brand/domain/repository/BrandAvailableSponsorRepository.java +++ b/src/main/java/com/example/RealMatch/brand/domain/repository/BrandAvailableSponsorRepository.java @@ -1,6 +1,7 @@ package com.example.RealMatch.brand.domain.repository; import java.util.List; +import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; @@ -14,4 +15,7 @@ public interface BrandAvailableSponsorRepository extends JpaRepository findByBrandIdWithImages(@Param("brandId") Long brandId); + + Optional + findByBrandIdAndId(Long brandId, Long id); } diff --git a/src/main/java/com/example/RealMatch/business/application/service/CampaignProposalQueryService.java b/src/main/java/com/example/RealMatch/business/application/service/CampaignProposalQueryService.java index 698e4ddb..5333315d 100644 --- a/src/main/java/com/example/RealMatch/business/application/service/CampaignProposalQueryService.java +++ b/src/main/java/com/example/RealMatch/business/application/service/CampaignProposalQueryService.java @@ -3,6 +3,8 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import com.example.RealMatch.brand.domain.entity.BrandAvailableSponsor; +import com.example.RealMatch.brand.domain.repository.BrandAvailableSponsorRepository; import com.example.RealMatch.business.domain.entity.CampaignProposal; import com.example.RealMatch.business.domain.repository.CampaignProposalRepository; import com.example.RealMatch.business.exception.BusinessErrorCode; @@ -17,6 +19,7 @@ public class CampaignProposalQueryService { private final CampaignProposalRepository campaignProposalRepository; + private final BrandAvailableSponsorRepository brandAvailableSponsorRepository; public CampaignProposalDetailResponse getProposalDetail( Long userId, @@ -25,6 +28,19 @@ public CampaignProposalDetailResponse getProposalDetail( CampaignProposal proposal = campaignProposalRepository.findByIdWithTags(proposalId) .orElseThrow(() -> new CustomException(BusinessErrorCode.CAMPAIGN_PROPOSAL_NOT_FOUND)); - return CampaignProposalDetailResponse.from(proposal); + String productName = null; + + // TODO: 데모데이 이후에 해당 제품이 없으면 에러 던지는 방향으로 수정 필요!! + 조회 권한 로직 추가 필요(본인만 조회 가능) + if (proposal.getProductId() != null) { + productName = brandAvailableSponsorRepository + .findByBrandIdAndId( + proposal.getBrand().getId(), + proposal.getProductId() + ) + .map(BrandAvailableSponsor::getName) + .orElse(null); + } + + return CampaignProposalDetailResponse.from(proposal, productName); } } diff --git a/src/main/java/com/example/RealMatch/business/presentation/dto/response/CampaignProposalDetailResponse.java b/src/main/java/com/example/RealMatch/business/presentation/dto/response/CampaignProposalDetailResponse.java index 7e0e695d..4236b296 100644 --- a/src/main/java/com/example/RealMatch/business/presentation/dto/response/CampaignProposalDetailResponse.java +++ b/src/main/java/com/example/RealMatch/business/presentation/dto/response/CampaignProposalDetailResponse.java @@ -25,6 +25,7 @@ public class CampaignProposalDetailResponse { private Long rewardAmount; private Long productId; + private String productName; private LocalDate startDate; private LocalDate endDate; @@ -36,7 +37,7 @@ public class CampaignProposalDetailResponse { private CampaignContentTagResponse contentTags; - public static CampaignProposalDetailResponse from(CampaignProposal proposal) { + public static CampaignProposalDetailResponse from(CampaignProposal proposal, String productName) { Campaign campaign = proposal.getCampaign(); return CampaignProposalDetailResponse.builder() @@ -49,6 +50,7 @@ public static CampaignProposalDetailResponse from(CampaignProposal proposal) { .description(proposal.getCampaignDescription()) .rewardAmount(Long.valueOf(proposal.getRewardAmount())) .productId(proposal.getProductId()) + .productName(productName) .startDate(proposal.getStartDate()) .endDate(proposal.getEndDate()) .status(proposal.getStatus().name()) From 2086223383e29cf11ffb15e9c3929af62ff408f5 Mon Sep 17 00:00:00 2001 From: ParkJiYeoung8297 Date: Thu, 19 Feb 2026 13:58:30 +0900 Subject: [PATCH 2/2] =?UTF-8?q?chore:=20=EC=A0=9C=EB=AF=B8=EB=82=98?= =?UTF-8?q?=EC=9D=B4=20=ED=94=BC=EB=93=9C=EB=B0=B1=EC=97=90=20=EB=94=B0?= =?UTF-8?q?=EB=9D=BC=20=EC=BD=94=EB=93=9C=20=EA=B0=84=EA=B2=B0=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BrandAvailableSponsorRepository.java | 3 +-- .../service/CampaignProposalQueryService.java | 20 ++++++++----------- 2 files changed, 9 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/example/RealMatch/brand/domain/repository/BrandAvailableSponsorRepository.java b/src/main/java/com/example/RealMatch/brand/domain/repository/BrandAvailableSponsorRepository.java index e71a50d1..0ac97954 100644 --- a/src/main/java/com/example/RealMatch/brand/domain/repository/BrandAvailableSponsorRepository.java +++ b/src/main/java/com/example/RealMatch/brand/domain/repository/BrandAvailableSponsorRepository.java @@ -16,6 +16,5 @@ public interface BrandAvailableSponsorRepository extends JpaRepository findByBrandIdWithImages(@Param("brandId") Long brandId); - Optional - findByBrandIdAndId(Long brandId, Long id); + Optional findByBrandIdAndId(Long brandId, Long id); } diff --git a/src/main/java/com/example/RealMatch/business/application/service/CampaignProposalQueryService.java b/src/main/java/com/example/RealMatch/business/application/service/CampaignProposalQueryService.java index 5333315d..4f45871c 100644 --- a/src/main/java/com/example/RealMatch/business/application/service/CampaignProposalQueryService.java +++ b/src/main/java/com/example/RealMatch/business/application/service/CampaignProposalQueryService.java @@ -1,5 +1,7 @@ package com.example.RealMatch.business.application.service; +import java.util.Optional; + import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -27,19 +29,13 @@ public CampaignProposalDetailResponse getProposalDetail( ) { CampaignProposal proposal = campaignProposalRepository.findByIdWithTags(proposalId) .orElseThrow(() -> new CustomException(BusinessErrorCode.CAMPAIGN_PROPOSAL_NOT_FOUND)); - - String productName = null; - + // TODO: 데모데이 이후에 해당 제품이 없으면 에러 던지는 방향으로 수정 필요!! + 조회 권한 로직 추가 필요(본인만 조회 가능) - if (proposal.getProductId() != null) { - productName = brandAvailableSponsorRepository - .findByBrandIdAndId( - proposal.getBrand().getId(), - proposal.getProductId() - ) - .map(BrandAvailableSponsor::getName) - .orElse(null); - } + String productName = Optional.ofNullable(proposal.getProductId()) + .flatMap(productId -> brandAvailableSponsorRepository + .findByBrandIdAndId(proposal.getBrand().getId(), productId)) + .map(BrandAvailableSponsor::getName) + .orElse(null); return CampaignProposalDetailResponse.from(proposal, productName); }