Coupon 엔티티
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Builder
@Entity
@Table(name = "Coupon")
public class Coupon {
/*
* 쿠폰 테이블(관리자, 판매자가 등록하는 테이블)
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long cno;
// 쿠폰 고유 번호 (PK, 자동 증가)
@ManyToOne
@JoinColumn(name="uid")
private User user;
// 발급자(User)와 다대일(Many-to-One) 관계
// - user 필드는 쿠폰을 생성한 ‘회원’(관리자 또는 판매자)을 가리킴
// - DB의 Coupon 테이블에 uid 외래키로 매핑
private String issuedBy;
// 발급처 (예: “관리자”, “판매자A” 등)
private String couponType;
// 쿠폰 종류
// - “개별상품할인” (판매자 발급)
// - “주문상품할인” (관리자 발급)
// - “배송비 무료” (관리자 발급)
private String couponName;
// 쿠폰 이름 (예: “여름세일10%”)
private String benefit;
// 혜택 설명 (예: “2,000원 할인”, “15% 할인” 등)
private LocalDate validFrom;
// 사용 시작일
private LocalDate validTo;
// 사용 만료일
@CreationTimestamp
private LocalDate regDate;
// 발급일(등록일) → 엔티티가 처음 저장되는 시점 자동 기록
private int validDaysAfterIssue;
// 발급 후 몇 일 이내에 사용 가능한지 (optional)
private String caution;
// 유의사항(예: “최소 구매금액 30,000원 이상” 등)
private String state;
// 쿠폰 상태
// - “발급중” (기본값, @PrePersist에서 설정)
// - “종료” (유효 기간이 지나거나 발급 종료 시 변경)
private int usedCount;
// 이미 사용된 횟수
private int issueCount;
// 총 발급 가능한 수량(또는 이미 발급된 총 수량)
private int minPrice;
// 최소 사용 조건 가격 (예: “20,000원 이상 구매 시 사용 가능”)
@PrePersist
public void prePersist() {
if (this.state == null) {
this.state = "발급중";
}
}
// 엔티티 저장 직전 호출
// state가 null인 경우 기본값 “발급중”으로 설정
}
설명
- cno (long)
- 쿠폰의 고유 식별자 (Primary Key)
@GeneratedValue(strategy = GenerationType.IDENTITY) → DB에서 자동 증가
- user (User)
@ManyToOne
- 여러 쿠폰(Coupon) 엔티티는 하나의 사용자(User)에 의해 발급될 수 있음
@JoinColumn(name="uid")
- Coupon 테이블에
uid 컬럼을 외래키로 저장하여, 해당 쿠폰 발급자를 참조
- 발급자는 관리자 또는 판매자로 구분되며,
User 엔티티와 연결
- issuedBy (String)
- 쿠폰을 발급한 주체(관리자 또는 판매자 이름 등)
- couponType (String)
- 쿠폰 종류 구분
- “개별상품할인” → 판매자가 특정 상품에 발급
- “주문상품할인” → 관리자가 전체 주문에 발급
- “배송비 무료” → 관리자가 배송비 면제 목적 발급
- couponName (String)
- benefit (String)
- 실제 할인 정보(예: “2,000원 할인”, “15% 할인”)
- validFrom / validTo (LocalDate)
- regDate (LocalDateTime)
@CreationTimestamp → 엔티티가 처음 저장되는 시각(발급일) 자동 기록
- validDaysAfterIssue (int)
- 발급일 기준 며칠 이내 사용해야 하는지(선택적)
- caution (String)
- 쿠폰 사용 시 유의사항(예: “발급 후 7일 이내 사용하세요”)
- state (String)
- 쿠폰 상태
- “발급중” (활성 상태, 기본값)
- “종료” (유효기간 만료 혹은 발급 종료 시)
@PrePersist → 엔티티 저장 직전에 state가 비어 있으면 “발급중” 자동 설정
- usedCount (int)
- issueCount (int)
- 발급된 쿠폰의 총 개수(또는 발급 가능 수량)
- minPrice (int)
- 쿠폰 사용을 위한 최소 주문 금액(예: “30,000원 이상 주문 시 사용 가능”)