๐
์ํ ์กฐํ ๋ก์ง ๊ตฌํํ๊ธฐ
ๅๆ
2024. 8. 3. 13:46
ProductController
@Operation(summary = "์ํ ์กฐํ", description = "์ํ ์กฐํ์
๋๋ค")
@GetMapping("/{id}")
public @ResponseBody ApiResponse<ProductSelectResponseDto> selectProduct(@PathVariable(name = "id") long id) throws Exception{
return ApiResponse.OK(productService.selectProduct(id));
}
ProductService
// ์ํ ์กฐํ
public ProductSelectResponseDto selectProduct(Long id) {
Product product = productRepository.findById(id)
.orElseThrow( ()-> new CustomException(PRODUCT_NOT_FOUND));
List<ProductSelectResponseDto.productOptionSelectResponseDto> optionDtoList = new ArrayList<>();
// Option Entity List ๋ฅผ Option Dto List๋ก ๋ฐ๊พธ๋ ๊ณผ์ (๊บผ๋ด๋ ๊ฑฐ)
for(ProductOption productOption : product.getProductOptionList()){
// Entity List → Entity
// Option ํ๋์ ์ฐ๊ฒฐ๋ Option detail Entity List๋ฅผ ๊ฐ์ ธ์ String ํ์
์ List detail์ ๋ฃ์ด์ค
// ๊ฒฐ๊ตญ์ ์ด ๊ณผ์ ์ด optionDto์ optionDetails ์๋ฆฌ์ ๋ฃ๊ธฐ ์ํจ.
List<String> detail = new ArrayList<>();
for(ProductOptionDetail d : productOption.getProductOptionDetailList()){
detail.add(d.getOptionContent());
}
ProductSelectResponseDto.productOptionSelectResponseDto optionDto = new ProductSelectResponseDto.productOptionSelectResponseDto(productOption.getOptionEx(), detail);
// ์์ optionDtoList๋ ์ฌ๋ฌ ๊ฐ์ optionDto๋ฅผ ๋ฃ๊ธฐ ์ํด ๋ง๋ฆ
optionDtoList.add(optionDto);
}
return new ProductSelectResponseDto(product.getProductNo(), product.getProductCategory().getProductCategoryNo(), product.getProductName(), product.getProductContent(),
product.getPrice(), product.getProductQuantity(), optionDtoList);
}
ProductSelectResponseDto
package com.example.bluesyroom.dto.product;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import java.util.List;
@AllArgsConstructor
@NoArgsConstructor
@Getter
public class ProductSelectResponseDto {
// โ
โ
โ
โ
โ
โ
โ
โ
โ
โ
โ
โ
โ
โ
โ
โ
โ
โ
โ
// optionEx๋ฅผ List๋ก ๋ฐ๊ฟ์ innetClass ๋ณ๊ฒฝ ํ๊ณ ~~~~
private long productNo;
private Long productCategoryNo;
private String productName;
private String productContent;
private int price;
private int productQuantity;
private List<productOptionSelectResponseDto> optionDtoList;
@NoArgsConstructor
@AllArgsConstructor
@Getter
public static class productOptionSelectResponseDto {
private String optionEx;
private List<String> optionDetails;
}
}
Product
package com.example.bluesyroom.entity;
import java.util.*;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import com.example.bluesyroom.entity.ProductImage;
@Entity
@NoArgsConstructor
@Getter
@Setter // ์ํ
@Table(name = "PRODUCT")
public class Product {
@Id // ๊ธฐ๋ณธํค
@GeneratedValue(strategy = GenerationType.IDENTITY) // auto_increament
@Column(name = "PRODUCT_NO", nullable = false)
private long productNo;
// DB ์ปฌ๋ผ์ _ ์ฌ์ฉ
@Column(name = "PRODUCT_NAME", nullable = false)
private String productName;
@Column(name = "PRODUCT_CONTENT", nullable = false)
private String productContent;
@Column(name = "PRICE", nullable = false)
private int price;
@Column(name = "PRODUCT_QUANTITY", nullable = false)
private int productQuantity;
// ํ
์ด๋ธ ์์ฑ๊ณผ ์กฐ์ธ์ ์ดํ์ ๋ฐ๋ก ์งํํ ์ ์์
@OneToOne
@JoinColumn(name = "PRODUCT_CATEGORY_NO")
private ProductCategory productCategory;
@OneToMany(mappedBy = "product")
private List<ProductImage> productImageList = new ArrayList<ProductImage>();
// โ
โ
@OneToMany(mappedBy = "product")
private List<ProductOption> productOptionList = new ArrayList<>();
public Product(String productName, String productContent, int price, int productQuantity, ProductCategory productCategory) {
this.productName = productName;
this.productContent = productContent;
this.price = price;
this.productQuantity = productQuantity;
this.productCategory = productCategory;
}
}
ProductOption
package com.example.bluesyroom.entity;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.util.ArrayList;
import java.util.List;
@Entity
@NoArgsConstructor
@Getter
@Setter // ์ํ ์ต์
@Table(name = "PRODUCT_OPTION")
public class ProductOption {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "OPTION_NO", nullable = false)
private long optionNo;
@Column(name = "OPTION_EX", nullable = false)
private String optionEx;
@ManyToOne
@JoinColumn(name = "PRODUCT_NO")
private Product product;
// โ
โ
@OneToMany(mappedBy = "productOption")
private List<ProductOptionDetail> productOptionDetailList = new ArrayList<>();
public ProductOption(String optionEx) {
this.optionEx = optionEx;
}
}
ProductOptionDetail
package com.example.bluesyroom.entity;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Entity
@NoArgsConstructor
@Getter
@Setter // ์ํ ์ต์
์์ธ
@Table(name = "PRODUCT_OPTION_DETAIL")
public class ProductOptionDetail {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "OPTION_DETAIL_NO", nullable = false)
private long optionDetailNo;
@Column(name = "OPTION_CONTENT", nullable = false)
private String optionContent;
@ManyToOne
@JoinColumn(name = "OPTION_NO")
private ProductOption productOption;
public ProductOptionDetail(String optionContent, ProductOption productOption) {
this.optionContent = optionContent;
this.productOption = productOption;
}
}