프론트 이미지 보고 DTO 만들기
- 프로젝트 생성> 구조 > 라이브러리 -lombok 최신 gson 2.9 추가
productDTO
.png%3Ftable%3Dblock%26id%3D14462a4b-5be2-807c-a55a-d9a8d0774410%26cache%3Dv2&w=1920&q=75)
import lombok.Data;
import ex01.model.Product;
@Data // get, set
public class ProductDTO {
private int id;
private String name;
public ProductDTO(Product product) {
this.id = product.getId();
this.name = product.getName();
}
}
ProductDetailDTO
.png%3Ftable%3Dblock%26id%3D14462a4b-5be2-8039-8fd1-cfb23161a7f2%26cache%3Dv2&w=1920&q=75)
import lombok.Data;
import ex01.model.Product;
import ex01.model.ProductOption;
import java.util.ArrayList;
import java.util.List;
@Data
public class ProductDetailDTO {
private int productId;
private String productName;
// ProductDetailDTO의 범위 내에서만 사용되는 클래스
// 다른 클래스에서 직접 사용할 필요가 없다
private List<ProductOptionDTO> options = new ArrayList<>();
public ProductDetailDTO(List<ProductOption> options) {
// 첫번째 옵션의 상품 ID와 이름 출력
// 모든 옵션의 Product 정보를 가져오려면 역시 반복문 필요
this.productId = options.get(0).getProduct().getId();
this.productName = options.get(0).getProduct().getName();
// models -> dtos
for (ProductOption option : options) {
this.options.add(new ProductOptionDTO(option));
}
}
// ProductOption 4개 전부 들고오기
@Data
class ProductOptionDTO {
private int id;
private String name;
private int price;
private int qty;
private Product product;
// 초기화를 위한 생성자
public ProductOptionDTO(ProductOption option) {
this.id = option.getId();
this.name = option.getName();
this.price = option.getPrice();
this.qty = option.getQty();
}
}
}
OrderDetailDTO
.png%3Ftable%3Dblock%26id%3D14462a4b-5be2-804b-a6ea-d178bc195200%26cache%3Dv2&w=1920&q=75)
.png%3Ftable%3Dblock%26id%3D14462a4b-5be2-800b-bb95-d8299dbe1e0e%26cache%3Dv2&w=1920&q=75)
import lombok.Data;
import ex01.model.OrderOption;
import java.util.*;
@Data
public class OrderDetailDTO {
private int orderId;
private List<OrderProductDTO> products = new ArrayList<>();
private int sumPrice;
public OrderDetailDTO(List<OrderOption> options) {
// 1. orderId
this.orderId = options.get(0).getOrder().getId();
// 2. sumPrice
for (OrderOption option : options) {
this.sumPrice += option.getTotalPrice();
}
// 3. products
// 3-1. 주문옵션들 productId [1,1,2] -> [1,2] 돈봉투 2개 만들기
Set<Integer> ids = new HashSet<>(); // [1,2] 넣기
for (OrderOption option : options) {
ids.add(option.getProduct().getId());
}
// 3-2. 중복 상품 크기만큼 반복하면서 주문 옵션 추가하기
for (Integer id : ids) {
List<OrderOption> temp = new ArrayList<>();
for (OrderOption option : options) {
if (id == option.getProduct().getId()) temp.add(option);
}
OrderProductDTO product = new OrderProductDTO(temp);
products.add(product);
}
}
@Data
class OrderProductDTO { // 돈봉투
private int productId;
private List<OrderOptionDTO> options = new ArrayList<OrderOptionDTO>();
public OrderProductDTO(List<OrderOption> options) {
this.productId = options.get(0).getProduct().getId();
for (OrderOption option : options) {
this.options.add(new OrderOptionDTO(option));
}
}
@Data
class OrderOptionDTO {
private int id;
private String optionName;
private int qty;
private int totalPrice;
public OrderOptionDTO(OrderOption option) {
this.id = option.getId();
this.optionName = option.getOptionName();
this.qty = option.getQty();
this.totalPrice = option.getTotalPrice();
}
}
}
}
Share article