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인 경우 기본값 “발급중”으로 설정
}

설명