From c6b0dc5288ba331730efae1d27d1fcc0179687ba Mon Sep 17 00:00:00 2001 From: yoonsseo Date: Tue, 30 Jan 2024 18:50:42 +0900 Subject: [PATCH] =?UTF-8?q?chore:=20=EA=B5=AC=EB=A7=A4=20=EB=A7=81?= =?UTF-8?q?=ED=81=AC=20api=20=EC=88=98=EC=A0=95=20#7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/response/GetFragrancePurchase.java | 25 ++--- .../fragrance/dto/response/PurchaseInfo.java | 13 +++ .../fragrance/service/FragranceService.java | 103 +++++++++++++++++- .../server/acode/global/common/ErrorCode.java | 1 + src/main/resources/application.yml | 9 +- 5 files changed, 131 insertions(+), 20 deletions(-) create mode 100644 src/main/java/server/acode/domain/fragrance/dto/response/PurchaseInfo.java diff --git a/src/main/java/server/acode/domain/fragrance/dto/response/GetFragrancePurchase.java b/src/main/java/server/acode/domain/fragrance/dto/response/GetFragrancePurchase.java index a758f48..2506898 100644 --- a/src/main/java/server/acode/domain/fragrance/dto/response/GetFragrancePurchase.java +++ b/src/main/java/server/acode/domain/fragrance/dto/response/GetFragrancePurchase.java @@ -1,26 +1,15 @@ package server.acode.domain.fragrance.dto.response; -import lombok.AccessLevel; -import lombok.Getter; -import lombok.NoArgsConstructor; +import lombok.*; import server.acode.domain.fragrance.entity.Fragrance; +import java.util.List; + @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor +@Builder public class GetFragrancePurchase { - private String link1; // 구매 링크 url - private String link2; - private String link3; - - public GetFragrancePurchase(String link1, String link2, String link3) { - this.link1 = link1; - this.link2 = link2; - this.link3 = link3; - } - - public static GetFragrancePurchase from(Fragrance fragrance) { - return new GetFragrancePurchase( - fragrance.getLink1(), fragrance.getLink2(), fragrance.getLink3() - ); - } + private boolean isSoldOut; + private List purchaseList; } diff --git a/src/main/java/server/acode/domain/fragrance/dto/response/PurchaseInfo.java b/src/main/java/server/acode/domain/fragrance/dto/response/PurchaseInfo.java new file mode 100644 index 0000000..205090a --- /dev/null +++ b/src/main/java/server/acode/domain/fragrance/dto/response/PurchaseInfo.java @@ -0,0 +1,13 @@ +package server.acode.domain.fragrance.dto.response; + +import lombok.*; + +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class PurchaseInfo { + private String link; + private String image; +} diff --git a/src/main/java/server/acode/domain/fragrance/service/FragranceService.java b/src/main/java/server/acode/domain/fragrance/service/FragranceService.java index 9393db2..0688ec7 100644 --- a/src/main/java/server/acode/domain/fragrance/service/FragranceService.java +++ b/src/main/java/server/acode/domain/fragrance/service/FragranceService.java @@ -1,6 +1,7 @@ package server.acode.domain.fragrance.service; import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.http.ResponseEntity; @@ -10,8 +11,10 @@ import server.acode.domain.family.entity.Family; import server.acode.domain.family.repository.FragranceFamilyRepository; import server.acode.domain.fragrance.dto.response.*; +import server.acode.domain.fragrance.entity.Brand; import server.acode.domain.fragrance.entity.Capacity; import server.acode.domain.fragrance.entity.Fragrance; +import server.acode.domain.fragrance.repository.BrandRepository; import server.acode.domain.fragrance.repository.CapacityRepository; import server.acode.domain.fragrance.repository.FragranceRepository; import server.acode.domain.ingredient.entity.Ingredient; @@ -36,6 +39,8 @@ import java.util.*; import java.util.stream.Collectors; +import static org.springframework.util.StringUtils.*; + @Service @Transactional(readOnly = true) @RequiredArgsConstructor @@ -59,6 +64,20 @@ public class FragranceService { private final UserRepository userRepository; + private final BrandRepository brandRepository; + + @Value("${store.image.siVillage}") + String siVillage; + + @Value("${store.image.lotteOn}") + String lotteOn; + + @Value("${store.image.kurly}") + String kurly; + + @Value("${store.image.lg}") + String lg; + @Transactional public GetFragranceResponse getFragranceDetail(Long fragranceId, CustomUserDetails userDetails) { @@ -369,7 +388,89 @@ private SimilarFragranceOrCond getSimilarFragranceOrCond(Long fragranceId, List< public GetFragrancePurchase getFragrancePurchase(Long fragranceId) { Fragrance fragrance = fragranceRepository.findById(fragranceId) .orElseThrow(() -> new CustomException(ErrorCode.FRAGRANCE_NOT_FOUND)); - return GetFragrancePurchase.from(fragrance); + + boolean isSoldOut = false; + if (!hasText(fragrance.getLink1())) { + isSoldOut = true; + return GetFragrancePurchase.builder().isSoldOut(isSoldOut).build(); + } + + List purchaseList = new ArrayList<>(); + PurchaseInfo purchaseInfo1 = PurchaseInfo.builder().link(fragrance.getLink1()).build(); + if (purchaseInfo1.getLink().startsWith("https://www.sivillage")) { + purchaseInfo1.setImage(siVillage); + } else if (purchaseInfo1.getLink().contains(fragrance.getBrand().getEngName().replace(" ", "").toLowerCase())) { // 공홈 + purchaseInfo1.setImage(fragrance.getBrand().getRoundImg()); + } else if (fragrance.getBrand().getId() == 5L) { // 조말론 + Brand brand = brandRepository.findById(5L).orElseThrow(() -> new CustomException(ErrorCode.BRAND_NOT_FOUND)); + purchaseInfo1.setImage(brand.getRoundImg()); + } else if (purchaseInfo1.getLink().startsWith("https://www.lotteon")) { + purchaseInfo1.setImage(lotteOn); + } else if (purchaseInfo1.getLink().startsWith("https://brand.naver.com/lg_perfumery")) { + purchaseInfo1.setImage(lg); + } else if (purchaseInfo1.getLink().startsWith("https://www.kurly")) { + purchaseInfo1.setImage(kurly); + } else { + throw new CustomException(ErrorCode.IMAGE_NOT_FOUND); + } + purchaseList.add(purchaseInfo1); + + if (hasText(fragrance.getLink2())) { + PurchaseInfo purchaseInfo2 = PurchaseInfo.builder().link(fragrance.getLink2()).build(); + if (purchaseInfo2.getLink().startsWith("https://www.sivillage")) { + purchaseInfo2.setImage(siVillage); + } else if (purchaseInfo2.getLink().contains(fragrance.getBrand().getEngName().replace(" ", "").toLowerCase())) { // 공홈 + purchaseInfo2.setImage(fragrance.getBrand().getRoundImg()); + } else if (fragrance.getBrand().getId() == 5L) { // 조말론 + Brand brand = brandRepository.findById(5L).orElseThrow(() -> new CustomException(ErrorCode.BRAND_NOT_FOUND)); + purchaseInfo2.setImage(brand.getRoundImg()); + } else if (purchaseInfo2.getLink().startsWith("https://www.lotteon")) { + purchaseInfo2.setImage(lotteOn); + } else if (purchaseInfo2.getLink().startsWith("https://brand.naver.com/lg_perfumery")) { + purchaseInfo2.setImage(lg); + } else if (purchaseInfo2.getLink().startsWith("https://www.kurly")) { + purchaseInfo2.setImage(kurly); + } else { + throw new CustomException(ErrorCode.IMAGE_NOT_FOUND); + } + purchaseList.add(purchaseInfo2); + } else { + return GetFragrancePurchase.builder() + .isSoldOut(isSoldOut) + .purchaseList(purchaseList) + .build(); + } + + if (hasText(fragrance.getLink3())) { + PurchaseInfo purchaseInfo3 = PurchaseInfo.builder().link(fragrance.getLink3()).build(); + if (purchaseInfo3.getLink().startsWith("https://www.sivillage")) { + purchaseInfo3.setImage(siVillage); + } else if (purchaseInfo3.getLink().contains(fragrance.getBrand().getEngName().replace(" ", "").toLowerCase())) { // 공홈 + purchaseInfo3.setImage(fragrance.getBrand().getRoundImg()); + } else if (fragrance.getBrand().getId() == 5L) { // 조말론 + Brand brand = brandRepository.findById(5L).orElseThrow(() -> new CustomException(ErrorCode.BRAND_NOT_FOUND)); + purchaseInfo3.setImage(brand.getRoundImg()); + } else if (purchaseInfo3.getLink().startsWith("https://www.lotteon")) { + purchaseInfo3.setImage(lotteOn); + } else if (purchaseInfo3.getLink().startsWith("https://brand.naver.com/lg_perfumery")) { + purchaseInfo3.setImage(lg); + } else if (purchaseInfo3.getLink().startsWith("https://www.kurly")) { + purchaseInfo3.setImage(kurly); + } else { + throw new CustomException(ErrorCode.IMAGE_NOT_FOUND); + } + purchaseList.add(purchaseInfo3); + } else { + return GetFragrancePurchase.builder() + .isSoldOut(isSoldOut) + .purchaseList(purchaseList) + .build(); + } + + return GetFragrancePurchase.builder() + .isSoldOut(isSoldOut) + .purchaseList(purchaseList) + .build(); } diff --git a/src/main/java/server/acode/global/common/ErrorCode.java b/src/main/java/server/acode/global/common/ErrorCode.java index 7680def..b50165c 100644 --- a/src/main/java/server/acode/global/common/ErrorCode.java +++ b/src/main/java/server/acode/global/common/ErrorCode.java @@ -34,6 +34,7 @@ public enum ErrorCode { REVIEW_LONGEVITY_NOT_FOUND(HttpStatus.NOT_FOUND, "관리자에게 문의 바랍니다."), REVIEW_INTENSITY_NOT_FOUND(HttpStatus.NOT_FOUND, "관리자에게 문의 바랍니다."), REVIEW_STYLE_NOT_FOUND(HttpStatus.NOT_FOUND, "관리자에게 문의 바랍니다."), + IMAGE_NOT_FOUND(HttpStatus.NOT_FOUND, "관리자에게 문의 바랍니다"), /* 409 CONFLICT */ diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 6157381..677f53e 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -59,4 +59,11 @@ cloud: auto: false presignedUrlDuration: ${PRESIGNED_URL_DURATION} -kakaoAdminKey: ${KAKAO_ADMIN_KEY} \ No newline at end of file +kakaoAdminKey: ${KAKAO_ADMIN_KEY} + +store: + image: + siVillage: ${STORE_IMAGE_SIVILLAGE} + lotteOn: ${STORE_IMAGE_LOTTEON} + kurly: ${STORE_IMAGE_KURLY} + lg: ${STORE_IMAGE_LG} \ No newline at end of file