본문 바로가기
Backend/이커머스 api

order api - domain(model, product, redis, repository) product

by 큌 2025. 2. 10.
반응형

product(AddProductCartForm, AddProductForm, AddProductItemForm, UpdateProductForm, UpdateProductItemForm)

AddProductCartForm

package com.zerobase.cms.order.domain.product;

import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class AddProductCartForm {
    private Long id;
    private Long sellerId;
    private String name;
    private String description;
    private List<ProductItem> items;

    @Getter
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class ProductItem {
        private Long id;
        private String name;
        private Integer count;
        private Integer price;
    }
}

장바구니 상품 추가 폼 (AddProductCartForm)

이 코드는 장바구니에 상품을 추가하기 위한 폼 데이터를 담는 클래스(AddProductCartForm)입니다. 폼 데이터는 사용자가 웹 페이지나 애플리케이션에서 입력한 데이터를 서버로 전송하기 위해 사용됩니다. AddProductCartForm은 상품 ID, 판매자 ID, 상품 이름, 상품 설명, 상품 아이템 목록 등의 정보를 저장합니다.

1. 클래스 구조 및 어노테이션

  • import java.util.List;: List 인터페이스를 가져옵니다. List는 순서가 있는 데이터 컬렉션을 나타냅니다.
  • import lombok.AllArgsConstructor;: Lombok 라이브러리의 어노테이션으로, 모든 필드를 인수로 받는 생성자를 자동으로 생성해줍니다.
  • import lombok.Builder;: Lombok 라이브러리의 어노테이션으로, 빌더 패턴을 자동으로 생성해줍니다.
  • import lombok.Getter;: Lombok 라이브러리의 어노테이션으로, 모든 필드에 대한 getter 메서드를 자동으로 생성해줍니다.
  • import lombok.NoArgsConstructor;: Lombok 라이브러리의 어노테이션으로, 인수가 없는 기본 생성자를 자동으로 생성해줍니다.
  • @Getter: Lombok 라이브러리의 어노테이션으로, 모든 필드에 대한 getter 메서드를 자동으로 생성해줍니다. getter 메서드는 객체의 필드 값을 외부에서 읽을 수 있도록 해줍니다.
  • @Builder: Lombok 라이브러리의 어노테이션으로, 빌더 패턴을 자동으로 생성해줍니다. 빌더 패턴은 객체 생성을 더 유연하고 가독성 좋게 만들어줍니다.

2. 클래스 필드

  • private Long id;: 상품 ID를 나타내는 속성입니다. private은 이 필드가 AddProductCartForm 클래스 내에서만 접근 가능하다는 것을 의미합니다.
  • private Long sellerId;: 판매자 ID를 나타내는 속성입니다.
  • private String name;: 상품 이름을 나타내는 속성입니다.
  • private String description;: 상품 설명을 나타내는 속성입니다.
  • private List<ProductItem> items;: 상품 아이템 목록을 나타내는 속성입니다. ProductItem은 AddProductCartForm 클래스 내부에 정의된 내부 클래스입니다.

3. 내부 클래스 (Inner Class): ProductItem

  • @Getter @Builder @NoArgsConstructor @AllArgsConstructor public static class ProductItem { ... }: ProductItem 클래스를 정의합니다.
    • public static class ProductItem { ... }: ProductItem 클래스를 정의합니다. public은 이 클래스가 모든 클래스에서 접근 가능하다는 것을 의미합니다. static은 이 클래스가 외부 클래스의 객체에 의존하지 않음을 나타냅니다.
    • @Getter @Builder @NoArgsConstructor @AllArgsConstructor: Lombok 어노테이션은 위에서 설명한 것과 동일합니다.
    • private Long id;: 상품 아이템 ID를 나타내는 속성입니다.
    • private String name;: 상품 아이템 이름을 나타내는 속성입니다.
    • private Integer count;: 상품 아이템 수량을 나타내는 속성입니다.
    • private Integer price;: 상품 아이템 가격을 나타내는 속성입니다.

4. 핵심 개념 및 추가 설명

  • 폼 데이터 (Form Data): 폼 데이터는 사용자가 웹 페이지나 애플리케이션에서 입력한 데이터를 서버로 전송하기 위해 사용됩니다. 폼 데이터는 HTML 폼 요소를 통해 수집되며, HTTP 요청 body에 담겨 서버로 전송됩니다.
  • DTO (Data Transfer Object): DTO는 서비스 간에 데이터를 주고받을 때 사용되는 객체입니다. DTO는 데이터베이스의 엔티티와 유사하지만, 영속성을 가지지 않고 단순히 데이터를 담는 역할만 합니다. DTO를 사용하면 엔티티의 모든 속성을 노출하지 않고 필요한 속성만 선택적으로 전송할 수 있으며, 데이터 전송량을 줄일 수 있습니다.
  • 빌더 패턴 (Builder Pattern): 빌더 패턴은 객체 생성을 더 유연하고 가독성 좋게 만들어주는 디자인 패턴입니다. 빌더 패턴을 사용하면 객체 생성 시 필요한 필드만 선택적으로 설정할 수 있습니다.
  • 내부 클래스 (Inner Class): 내부 클래스는 다른 클래스 내부에 정의된 클래스입니다. 내부 클래스는 외부 클래스의 멤버에 접근할 수 있으며, 코드 캡슐화를 높이는 데 사용됩니다. 내부 클래스는 static으로 선언될 수 있으며, 이 경우 외부 클래스의 객체에 의존하지 않고 독립적으로 사용할 수 있습니다.

AddProductForm

package com.zerobase.cms.order.domain.product;

import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class AddProductForm {
    private String name;
    private String description;
    private List<AddProductItemForm> items;
}

상품 추가 폼 (AddProductForm)

이 코드는 새로운 상품을 추가하기 위한 폼 데이터를 담는 클래스(AddProductForm)입니다. 폼 데이터는 사용자가 웹 페이지나 애플리케이션에서 입력한 데이터를 서버로 전송하기 위해 사용됩니다. AddProductForm은 상품 이름, 상품 설명, 상품 아이템 목록 등의 정보를 저장합니다.

1. 클래스 필드

  • private String name;: 상품 이름을 나타내는 속성입니다. private은 이 필드가 AddProductForm 클래스 내에서만 접근 가능하다는 것을 의미합니다.
  • private String description;: 상품 설명을 나타내는 속성입니다.
  • private List<AddProductItemForm> items;: 상품 아이템 목록을 나타내는 속성입니다. AddProductItemForm은 각각의 상품 아이템에 대한 정보를 담는 클래스입니다.

AddProductItemForm

package com.zerobase.cms.order.domain.product;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class AddProductItemForm {
    private Long productId;
    private String name;
    private Integer price;
    private Integer count;
}

상품 아이템 추가 폼 (AddProductItemForm)

이 코드는 새로운 상품 아이템을 추가하기 위한 폼 데이터를 담는 클래스(AddProductItemForm)입니다. 폼 데이터는 사용자가 웹 페이지나 애플리케이션에서 입력한 데이터를 서버로 전송하기 위해 사용됩니다. AddProductItemForm은 상품 ID, 상품 아이템 이름, 가격, 수량 등의 정보를 저장합니다.

1. 클래스 필드

  • private Long productId;: 상품 ID를 나타내는 속성입니다. private은 이 필드가 AddProductItemForm 클래스 내에서만 접근 가능하다는 것을 의미합니다.
  • private String name;: 상품 아이템 이름을 나타내는 속성입니다.
  • private Integer price;: 상품 아이템 가격을 나타내는 속성입니다. Integer는 int 타입의 래퍼 클래스이며, null 값을 가질 수 있습니다.
  • private Integer count;: 상품 아이템 수량을 나타내는 속성입니다.

UpdateProductForm

package com.zerobase.cms.order.domain.product;

import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class UpdateProductForm {
    private Long id;
    private String name;
    private String description;
    private List<UpdateProductItemForm> items;
}

상품 수정 폼 (UpdateProductForm)

이 코드는 기존 상품 정보를 수정하기 위한 폼 데이터를 담는 클래스(UpdateProductForm)입니다. 폼 데이터는 사용자가 웹 페이지나 애플리케이션에서 입력한 데이터를 서버로 전송하기 위해 사용됩니다. UpdateProductForm은 상품 ID, 상품 이름, 상품 설명, 상품 아이템 목록 등의 정보를 저장합니다.

1. 클래스 필드

  • private Long id;: 상품 ID를 나타내는 속성입니다. 이 값은 수정할 상품을 식별하는 데 사용됩니다. private은 이 필드가 UpdateProductForm 클래스 내에서만 접근 가능하다는 것을 의미합니다.
  • private String name;: 상품 이름을 나타내는 속성입니다. 수정할 상품의 새로운 이름을 담습니다.
  • private String description;: 상품 설명을 나타내는 속성입니다. 수정할 상품의 새로운 설명을 담습니다.
  • private List<UpdateProductItemForm> items;: 상품 아이템 목록을 나타내는 속성입니다. 각 상품 아이템에 대한 수정 정보를 담고 있는 UpdateProductItemForm 객체의 리스트입니다.

UpdateProductItemForm

package com.zerobase.cms.order.domain.product;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class UpdateProductItemForm {
    private Long id;
    private String name;
    private Integer price;
    private Integer count;
}

상품 아이템 수정 폼 (UpdateProductItemForm)

이 코드는 기존 상품 아이템 정보를 수정하기 위한 폼 데이터를 담는 클래스(UpdateProductItemForm)입니다. 폼 데이터는 사용자가 웹 페이지나 애플리케이션에서 입력한 데이터를 서버로 전송하기 위해 사용됩니다. UpdateProductItemForm은 상품 아이템 ID, 상품 아이템 이름, 가격, 수량 등의 정보를 저장합니다.

1. 클래스 필드

  • private Long id;: 상품 아이템 ID를 나타내는 속성입니다. 이 값은 수정할 상품 아이템을 식별하는 데 사용됩니다. private은 이 필드가 UpdateProductItemForm 클래스 내에서만 접근 가능하다는 것을 의미합니다.
  • private String name;: 상품 아이템 이름을 나타내는 속성입니다. 수정할 상품 아이템의 새로운 이름을 담습니다.
  • private Integer price;: 상품 아이템 가격을 나타내는 속성입니다. 수정할 상품 아이템의 새로운 가격을 담습니다. Integer는 int 타입의 래퍼 클래스이며, null 값을 가질 수 있습니다.
  • private Integer count;: 상품 아이템 수량을 나타내는 속성입니다. 수정할 상품 아이템의 새로운 수량을 담습니다.
반응형