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가 비어 있으면 “미사용”으로 설정
}
설명
- issueNo (long)
- 발급된 쿠폰 엔티티의 고유 식별자 (Primary Key)
@GeneratedValue(strategy = GenerationType.IDENTITY) → DB에서 자동으로 증가
- user (User)
- 쿠폰을 발급받은 유저와의 다대일(Many-to-One) 관계
@JoinColumn(name="uid") → CouponIssue 테이블에 uid 컬럼이 외래키로 저장
- “이 쿠폰을 보유하거나 사용한 유저”를 가리킴
- coupon (Coupon)
- 어떤 쿠폰 템플릿(Coupon 엔티티)을 발급받았는지 연결
@JoinColumn(name="cno") → CouponIssue 테이블에 cno 컬럼이 외래키로 저장
- Coupon 테이블에 정의된 “혜택, 유효 기간, 최소금액 조건” 등을 참조
- state (String)
- 발급된 쿠폰의 사용 상태
"미사용" (기본 상태)
"사용" (유저가 결제에 적용했을 때 변경)
@PrePersist → 엔티티가 처음 저장될 때 상태가 비어 있으면 자동으로 "미사용"으로 설정
- usedDate (LocalDate)
- 쿠폰이 실제로 사용된 날짜
state가 "사용"으로 변경될 때, 코드에서 이 필드에 사용일을 기록
- regDate (LocalDateTime)
@CreationTimestamp → 쿠폰 발급 시점(엔티티가 DB에 INSERT된 시점)을 자동 기록
- “유저가 쿠폰을 받은 순간”을 나타냄
- validTo (String)
- 이 발급된 쿠폰이 만료되는 날짜(문자열)
- Coupon 템플릿의
validTo 값을 그대로 복사하거나,
“발급 후 N일 이내” 규칙을 계산해 문자열로 저장할 수 있음
- issuedBy (String)
- 이 CouponIssue가 어떤 주체(관리자 또는 판매자)로부터 발급되었는지 기록
- Coupon 엔티티의
issuedBy 값과 일치