From 52079eab2f03ccee9c54c6bbd9ff4da4dc5a10f6 Mon Sep 17 00:00:00 2001 From: SoohoLee Date: Mon, 10 Jul 2023 01:08:53 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20dto=20=EC=A7=81=EB=A0=AC=ED=99=94?= =?UTF-8?q?=20=EC=A0=81=EC=9A=A9=20(#348)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/response/ProductListResponse.java | 34 +++++++---- .../product/dto/response/ProductResponse.java | 61 +++++++++++-------- .../entity/productOption/ProductOption.java | 17 ++++-- .../dto/ProductOptionSaveRequest.java | 8 ++- .../repository/ProductRepositoryImpl.java | 5 +- 5 files changed, 81 insertions(+), 44 deletions(-) diff --git a/src/main/java/project/trendpick_pro/domain/product/entity/product/dto/response/ProductListResponse.java b/src/main/java/project/trendpick_pro/domain/product/entity/product/dto/response/ProductListResponse.java index af491e98..6d0e6784 100644 --- a/src/main/java/project/trendpick_pro/domain/product/entity/product/dto/response/ProductListResponse.java +++ b/src/main/java/project/trendpick_pro/domain/product/entity/product/dto/response/ProductListResponse.java @@ -3,20 +3,20 @@ import com.querydsl.core.annotations.QueryProjection; import lombok.*; import project.trendpick_pro.domain.product.entity.product.Product; + +import java.io.Serializable; //import project.trendpick_pro.global.search.entity.ProductSearch; @Data @NoArgsConstructor(access = AccessLevel.PROTECTED) -public class ProductListResponse { +public class ProductListResponse implements Serializable { private Long id; private String name; private String brand; private String mainFile; private int price; - private int discountRate; - private int discountedPrice; @Builder @@ -32,15 +32,25 @@ public ProductListResponse(Long id, String name, String brand, String mainFile, } public static ProductListResponse of(Product product) { - return ProductListResponse.builder() - .id(product.getId()) - .name(product.getName()) - .brand(product.getBrand().getName()) - .mainFile(product.getFile().getFileName()) - .price(product.getProductOption().getPrice()) - .discountedPrice(product.getDiscountedPrice()) - .discountRate(product.getDiscountRate()) - .build(); + if (product.getDiscountedPrice() == 0 && product.getDiscountRate() == 0) { + return ProductListResponse.builder() + .id(product.getId()) + .name(product.getName()) + .brand(product.getBrand().getName()) + .mainFile(product.getFile().getFileName()) + .price(product.getProductOption().getPrice()) + .build(); + } else { + return ProductListResponse.builder() + .id(product.getId()) + .name(product.getName()) + .brand(product.getBrand().getName()) + .mainFile(product.getFile().getFileName()) + .price(product.getProductOption().getPrice()) + .discountedPrice(product.getDiscountedPrice()) + .discountRate(product.getDiscountRate()) + .build(); + } } // public static ProductListResponse of(ProductSearch product) { diff --git a/src/main/java/project/trendpick_pro/domain/product/entity/product/dto/response/ProductResponse.java b/src/main/java/project/trendpick_pro/domain/product/entity/product/dto/response/ProductResponse.java index fe578661..6be0ddfb 100644 --- a/src/main/java/project/trendpick_pro/domain/product/entity/product/dto/response/ProductResponse.java +++ b/src/main/java/project/trendpick_pro/domain/product/entity/product/dto/response/ProductResponse.java @@ -9,12 +9,13 @@ import project.trendpick_pro.domain.product.entity.product.Product; import project.trendpick_pro.domain.tags.tag.entity.Tag; +import java.io.Serializable; import java.util.ArrayList; import java.util.List; @Data @NoArgsConstructor(access = AccessLevel.PROTECTED) -public class ProductResponse { +public class ProductResponse implements Serializable { private Long id; private String name; @@ -27,17 +28,14 @@ public class ProductResponse { private List sizes; private List colors; private int price; - private int stock; - private List tags = new ArrayList<>(); - + private List tags = new ArrayList<>(); private int discountRate; - private int discountedPrice; @Builder @QueryProjection public ProductResponse(Long id, String name, String mainCategory, String subCategory, String brand, String description, - String mainFile, List subFiles, List sizes, List colors, int price, int stock, List tags, double discountRate, int discountedPrice) { + String mainFile, List subFiles, List sizes, List colors, int price, List tags, double discountRate, int discountedPrice) { this.id = id; this.name = name; this.mainCategory = mainCategory; @@ -49,30 +47,45 @@ public ProductResponse(Long id, String name, String mainCategory, String subCate this.sizes = sizes; this.colors = colors; this.price = price; - this.stock = stock; this.tags = tags; this.discountRate = (int) discountRate; this.discountedPrice = discountedPrice; } public static ProductResponse of (Product product) { - return ProductResponse.builder() - .id(product.getId()) - .name(product.getName()) - .mainCategory(product.getMainCategory().getName()) - .subCategory(product.getSubCategory().getName()) - .brand(product.getBrand().getName()) - .description(product.getDescription()) - .mainFile(product.getFile().getFileName()) - .subFiles(subFiles(product.getFile().getChild())) - .sizes(product.getProductOption().getSizes()) - .colors(product.getProductOption().getColors()) - .price(product.getProductOption().getPrice()) - .stock(product.getProductOption().getStock()) - .tags(new ArrayList<>(product.getTags())) - .discountedPrice(product.getDiscountedPrice()) - .discountRate(product.getDiscountRate()) - .build(); + if (product.getDiscountedPrice() == 0 && product.getDiscountRate() == 0) { + return ProductResponse.builder() + .id(product.getId()) + .name(product.getName()) + .mainCategory(product.getMainCategory().getName()) + .subCategory(product.getSubCategory().getName()) + .brand(product.getBrand().getName()) + .description(product.getDescription()) + .mainFile(product.getFile().getFileName()) + .subFiles(subFiles(product.getFile().getChild())) + .sizes(product.getProductOption().getSizes()) + .colors(product.getProductOption().getColors()) + .price(product.getProductOption().getPrice()) + .tags(product.getTags().stream().map(Tag::getName).toList()) + .build(); + } else { + return ProductResponse.builder() + .id(product.getId()) + .name(product.getName()) + .mainCategory(product.getMainCategory().getName()) + .subCategory(product.getSubCategory().getName()) + .brand(product.getBrand().getName()) + .description(product.getDescription()) + .mainFile(product.getFile().getFileName()) + .subFiles(subFiles(product.getFile().getChild())) + .sizes(product.getProductOption().getSizes()) + .colors(product.getProductOption().getColors()) + .price(product.getProductOption().getPrice()) + .tags(product.getTags().stream().map(Tag::getName).toList()) + .discountedPrice(product.getDiscountedPrice()) + .discountRate(product.getDiscountRate()) + .build(); + } } private static List subFiles(List subFiles) { diff --git a/src/main/java/project/trendpick_pro/domain/product/entity/productOption/ProductOption.java b/src/main/java/project/trendpick_pro/domain/product/entity/productOption/ProductOption.java index 4f9137c3..f51c4ff9 100644 --- a/src/main/java/project/trendpick_pro/domain/product/entity/productOption/ProductOption.java +++ b/src/main/java/project/trendpick_pro/domain/product/entity/productOption/ProductOption.java @@ -5,25 +5,27 @@ import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; +import project.trendpick_pro.domain.product.entity.product.ProductStatus; import project.trendpick_pro.domain.product.entity.productOption.dto.ProductOptionSaveRequest; import project.trendpick_pro.domain.product.exception.ProductStockOutException; +import java.io.Serializable; import java.util.List; @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) -public class ProductOption { +public class ProductOption implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; - @ElementCollection + @ElementCollection(fetch = FetchType.EAGER) @CollectionTable(name = "product_option_sizes", joinColumns = @JoinColumn(name = "product_option_id")) @Column(name = "size") private List sizes; - @ElementCollection + @ElementCollection(fetch = FetchType.EAGER) @CollectionTable(name = "product_option_colors", joinColumns = @JoinColumn(name = "product_option_id")) @Column(name = "color") private List colors; @@ -34,8 +36,15 @@ public class ProductOption { @Column(name = "price", nullable = false) private int price; + @Enumerated(EnumType.STRING) + private ProductStatus status; + + public void connectStatus(ProductStatus status){ + this.status = status; + } + @Builder - public ProductOption(List size, List color, int stock, int price) { + private ProductOption(List size, List color, int stock, int price) { this.sizes = size; this.colors = color; this.stock = stock; diff --git a/src/main/java/project/trendpick_pro/domain/product/entity/productOption/dto/ProductOptionSaveRequest.java b/src/main/java/project/trendpick_pro/domain/product/entity/productOption/dto/ProductOptionSaveRequest.java index 0fb0cbe7..d30991c3 100644 --- a/src/main/java/project/trendpick_pro/domain/product/entity/productOption/dto/ProductOptionSaveRequest.java +++ b/src/main/java/project/trendpick_pro/domain/product/entity/productOption/dto/ProductOptionSaveRequest.java @@ -24,20 +24,24 @@ public class ProductOptionSaveRequest { @Min(value = 1, message = "가격을 입력해주세요.(1원 이상부터 입력할 수 있습니다.)") private int price; + private String status; + @Builder - public ProductOptionSaveRequest(List sizes, List colors, int stock, int price) { + public ProductOptionSaveRequest(List sizes, List colors, int stock, int price, String status) { this.sizes = sizes; this.colors = colors; this.stock = stock; this.price = price; + this.status = status; } - public static ProductOptionSaveRequest of (List sizes, List colors, int stock, int price) { + public static ProductOptionSaveRequest of (List sizes, List colors, int stock, int price, String status) { return ProductOptionSaveRequest.builder() .sizes(sizes) .colors(colors) .stock(stock) .price(price) + .status(status) .build(); } } diff --git a/src/main/java/project/trendpick_pro/domain/product/repository/ProductRepositoryImpl.java b/src/main/java/project/trendpick_pro/domain/product/repository/ProductRepositoryImpl.java index da158f18..01949e80 100644 --- a/src/main/java/project/trendpick_pro/domain/product/repository/ProductRepositoryImpl.java +++ b/src/main/java/project/trendpick_pro/domain/product/repository/ProductRepositoryImpl.java @@ -9,6 +9,7 @@ import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.support.PageableExecutionUtils; +import project.trendpick_pro.domain.product.entity.product.ProductStatus; import project.trendpick_pro.domain.product.entity.product.dto.request.ProductSearchCond; import project.trendpick_pro.domain.product.entity.product.dto.response.*; import project.trendpick_pro.domain.product.entity.productOption.QProductOption; @@ -52,8 +53,8 @@ public Page findAllByCategoryId(ProductSearchCond cond, Pag .leftJoin(product.productOption, productOption) .leftJoin(product.file, commonFile) .where( - mainCategoryEq(cond) - .and(subCategoryEq(cond)) + mainCategoryEq(cond), + subCategoryEq(cond) ) .offset(pageable.getOffset()) .limit(pageable.getPageSize())