Cart 엔티티
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@ToString(exclude = "product")
@Builder
@Entity
@Table(name = "Cart")
public class Cart {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int cartNo; // 장바구니 고유 번호 (PK)
// 다대일(Many-to-One) 관계: 여러 장바구니 항목은 하나의 사용자(User)에 속함
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "uid", nullable = false)
private User user;
// 다대일(Many-to-One) 관계: 여러 장바구니 항목은 하나의 상품(Product)에 속함
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "prodNo", nullable = false)
private Product product;
private int cartProdCount = 1;
// “장바구니에 담은 상품 수량” (기본값 1)
@CreationTimestamp
private LocalDateTime cartProdDate;
// “장바구니에 담은 일시”를 자동으로 저장
// ——————————————
// 옵션 정보: 최대 6개 옵션까지 지원
// opt1 ~ opt6: 옵션명
// opt1Cont ~ opt6Cont: 옵션별 선택 내용
// (예: 색상, 사이즈 등)
// ——————————————
private String opt1;
private String opt1Cont;
private String opt2;
private String opt2Cont;
private String opt3;
private String opt3Cont;
private String opt4;
private String opt4Cont;
private String opt5;
private String opt5Cont;
private String opt6;
private String opt6Cont;
}
설명
- cartNo
- user (User)
@ManyToOne(fetch = FetchType.LAZY)
- 한 명의 사용자는 여러 개의
Cart 항목을 가질 수 있음
@JoinColumn(name = "uid")
- DB의
Cart 테이블에 uid 외래키로 매핑
nullable = false → 반드시 로그인된 사용자와 연결
- product (Product)
@ManyToOne(fetch = FetchType.LAZY)
- 한 상품에 여러 장바구니 항목이 있을 수 있음
@JoinColumn(name = "prodNo")
- DB의
Cart 테이블에 prodNo 외래키로 매핑
nullable = false → 반드시 실제 상품과 연결
- cartProdCount
- cartProdDate
@CreationTimestamp 사용
- 엔티티가 저장되는 시점(담긴 시각)을 자동 저장
- 옵션 필드 (opt1 \~ opt6, opt1Cont \~ opt6Cont)
- 최대 6개까지 옵션을 저장할 수 있도록 정의
- 예:
opt1 = "색상", opt1Cont = "레드"
- 필요한 옵션이 없으면 빈 문자열(“”)로 저장 가능
동작 흐름
- 장바구니 담기
- 사용자가 상품을 선택하고 옵션/수량을 지정하면
Cart 엔티티를 생성하여 user, product, cartProdCount, 옵션 정보를 세팅
- JPA의
save(cart) 호출 → DB에 INSERT → cartNo 자동 생성, cartProdDate 자동 저장
- 기존 항목 조회
- 동일한 사용자·상품·옵션 조합이 이미 있으면
- 해당
Cart 엔티티를 조회 후 cartProdCount만 증가 → save로 UPDATE
- 없으면 새
Cart 엔티티를 만들어 INSERT
- 장바구니 조회
CartRepository.findAllByUser(user) → 사용자에 해당하는 모든 장바구니 항목 조회
- 조회된
Cart 목록에서 product 정보, 각 옵션, 수량 등을 뷰로 전달
- 장바구니 삭제/수정
- 특정
cartNo로 삭제(deleteByCartNo(cartNo))
- 수량 업데이트 시
findById(cartNo) → Cart 찾고 setCartProdCount(newQuantity) → save