From c6b0dc5288ba331730efae1d27d1fcc0179687ba Mon Sep 17 00:00:00 2001 From: yoonsseo Date: Tue, 30 Jan 2024 18:50:42 +0900 Subject: [PATCH 1/3] =?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 From b283583900f9c65bbf17000c235297f46bccf2a5 Mon Sep 17 00:00:00 2001 From: yoonsseo Date: Wed, 31 Jan 2024 01:03:43 +0900 Subject: [PATCH 2/3] =?UTF-8?q?chore:=20dto=20=EC=88=98=EC=A0=95=20#7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/fragrance/dto/response/GetFragrancePurchase.java | 2 ++ .../acode/domain/fragrance/dto/response/PurchaseInfo.java | 1 + 2 files changed, 3 insertions(+) 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 2506898..52da7ac 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 @@ -11,5 +11,7 @@ @Builder public class GetFragrancePurchase { private boolean isSoldOut; + private String fragranceName; + private String brandName; 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 index 205090a..abfa3a6 100644 --- a/src/main/java/server/acode/domain/fragrance/dto/response/PurchaseInfo.java +++ b/src/main/java/server/acode/domain/fragrance/dto/response/PurchaseInfo.java @@ -8,6 +8,7 @@ @AllArgsConstructor @Builder public class PurchaseInfo { + private String title; private String link; private String image; } From c23c1ffec1adb2e89d956437ede562ba1c167b32 Mon Sep 17 00:00:00 2001 From: yoonsseo Date: Wed, 31 Jan 2024 01:04:21 +0900 Subject: [PATCH 3/3] =?UTF-8?q?chore:=20dto=20=EC=88=98=EC=A0=95=20?= =?UTF-8?q?=EB=B0=8F=20=EB=A9=94=EC=86=8C=EB=93=9C=20=EB=B6=84=EB=A6=AC=20?= =?UTF-8?q?#7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fragrance/service/FragranceService.java | 96 +++++++++---------- 1 file changed, 44 insertions(+), 52 deletions(-) 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 0688ec7..a9849b7 100644 --- a/src/main/java/server/acode/domain/fragrance/service/FragranceService.java +++ b/src/main/java/server/acode/domain/fragrance/service/FragranceService.java @@ -392,87 +392,79 @@ public GetFragrancePurchase getFragrancePurchase(Long fragranceId) { boolean isSoldOut = false; if (!hasText(fragrance.getLink1())) { isSoldOut = true; - return GetFragrancePurchase.builder().isSoldOut(isSoldOut).build(); + return GetFragrancePurchase.builder() + .isSoldOut(isSoldOut) + .fragranceName(fragrance.getName()) + .brandName(fragrance.getBrand().getKorName()) + .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); - } + PurchaseInfo purchaseInfo1 = setPurchaseInfo(fragrance, fragrance.getLink1()); 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); - } + PurchaseInfo purchaseInfo2 = setPurchaseInfo(fragrance, fragrance.getLink2()); purchaseList.add(purchaseInfo2); } else { return GetFragrancePurchase.builder() .isSoldOut(isSoldOut) + .fragranceName(fragrance.getName()) + .brandName(fragrance.getBrand().getKorName()) .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); - } + PurchaseInfo purchaseInfo3 = setPurchaseInfo(fragrance, fragrance.getLink3()); purchaseList.add(purchaseInfo3); } else { return GetFragrancePurchase.builder() .isSoldOut(isSoldOut) + .fragranceName(fragrance.getName()) + .brandName(fragrance.getBrand().getKorName()) .purchaseList(purchaseList) .build(); } return GetFragrancePurchase.builder() .isSoldOut(isSoldOut) + .fragranceName(fragrance.getName()) + .brandName(fragrance.getBrand().getKorName()) .purchaseList(purchaseList) .build(); } + private PurchaseInfo setPurchaseInfo(Fragrance fragrance, String link) { + PurchaseInfo purchaseInfo = PurchaseInfo.builder().link(link).build(); + + if (purchaseInfo.getLink().startsWith("https://www.sivillage")) { + purchaseInfo.setImage(siVillage); + purchaseInfo.setTitle("S.I.VILLAGE 신세계인터내셔날 공식몰"); + } else if (purchaseInfo.getLink().contains(fragrance.getBrand().getEngName().replace(" ", "").toLowerCase())) { // 공홈 + purchaseInfo.setImage(fragrance.getBrand().getRoundImg()); +// StringBuilder sb = new StringBuilder(fragrance.getBrand().getEngName()).append(" ").append(fragrance.getBrand().getKorName()); + purchaseInfo.setTitle(fragrance.getBrand().getEngName() + " " + fragrance.getBrand().getKorName()); + } else if (fragrance.getBrand().getId() == 5L) { // 조말론 + Brand brand = brandRepository.findById(5L).orElseThrow(() -> new CustomException(ErrorCode.BRAND_NOT_FOUND)); + purchaseInfo.setImage(brand.getRoundImg()); + purchaseInfo.setTitle("JO MALONE LONDON 조말론 런던"); + } else if (purchaseInfo.getLink().startsWith("https://www.lotteon")) { + purchaseInfo.setImage(lotteOn); + purchaseInfo.setTitle("LOTTE ON 롯데온"); + } else if (purchaseInfo.getLink().startsWith("https://brand.naver.com/lg_perfumery")) { + purchaseInfo.setImage(lg); + purchaseInfo.setTitle("LG생활건강"); + } else if (purchaseInfo.getLink().startsWith("https://www.kurly")) { + purchaseInfo.setImage(kurly); + purchaseInfo.setTitle("KURLY 컬리"); + } else { + throw new CustomException(ErrorCode.IMAGE_NOT_FOUND); + } + + return purchaseInfo; + } + public GetFragranceReview getFragranceReview(Long fragranceId, PageRequest pageRequest) { Pageable pageable = pageRequest.of();