CouponIssue 엔티티


@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Builder
@Entity
@Table(name = "CouponIssue")
public class CouponIssue {

    /*
     * 유저가 실제로 보유·사용하는 쿠폰 정보
     */

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long issueNo;
    // 발급된 쿠폰의 고유 식별자 (PK, 자동 증가)

    @ManyToOne
    @JoinColumn(name="uid")
    private User user;
    // 쿠폰을 받은(발급받은) 유저와의 다대일(Many-to-One) 관계
    //   - CouponIssue 테이블에 uid 외래키로 매핑
    //   - “어느 유저가 이 쿠폰을 보유·사용하는가”를 나타냄

    @ManyToOne
    @JoinColumn(name="cno")
    private Coupon coupon;
    // 어떤 쿠폰 템플릿(Coupon 엔티티)을 발급받았는지 연결
    //   - CouponIssue 테이블에 cno 외래키로 매핑
    //   - Coupon 테이블의 개별 쿠폰 정보(혜택, 유효 기간 등)를 참조

    private String state;
    // 쿠폰 사용 상태
    //   - “미사용” (발급 직후 기본값, @PrePersist에서 설정)
    //   - “사용”    (유저가 결제 시 해당 쿠폰을 적용하면 변경)

    private LocalDate usedDate;
    // 쿠폰이 실제로 사용된 날짜(“사용” 상태일 때 기록)
    //   - 사용되지 않은 상태에서는 null

    @CreationTimestamp
    private LocalDate regDate;
    // 쿠폰이 유저에게 발급된(생성된) 날짜
    //   - 엔티티 저장 시점에 자동으로 현재 시각이 기록

    private String validTo;
    // 이 발급된 쿠폰의 “만료일”
    //   - Coupon.validTo와 동일하거나, A → 발급 후 N일 이내 같은 규칙을 문자열로 저장할 수 있음

    private String issuedBy;
    // 발급 주체(관리자 또는 판매자 이름)
    //   - Coupon.issuedBy와 동일한 값이 복사되어 저장됨

    @PrePersist
    public void prePersist() {
        if (this.state == null) {
            this.state = "미사용";
        }
    }
    // 엔티티 저장 직전에 호출
    // state가 비어 있으면 “미사용”으로 설정
}

설명