package com.mydreamjob.offer; import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import java.time.LocalDateTime; /** * Offer 提醒记录 * *
reminder_type:EXPIRING_3_DAYS / EXPIRING_1_DAY(定时任务)、MANUAL(企业手动)。 * status:SCHEDULED / SENT / SKIPPED。 * 唯一约束 (offer_id, reminder_type) 保证同一类型提醒只创建一次。 */ @Data @Builder @NoArgsConstructor @AllArgsConstructor @Entity @Table(name = "offer_reminders", uniqueConstraints = @UniqueConstraint(name = "uk_offer_reminders", columnNames = {"offer_id", "reminder_type"})) public class OfferReminder { public static final String TYPE_EXPIRING_3_DAYS = "EXPIRING_3_DAYS"; public static final String TYPE_EXPIRING_1_DAY = "EXPIRING_1_DAY"; public static final String TYPE_MANUAL = "MANUAL"; public static final String STATUS_SCHEDULED = "SCHEDULED"; public static final String STATUS_SENT = "SENT"; public static final String STATUS_SKIPPED = "SKIPPED"; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "offer_id", nullable = false) private Long offerId; @Column(name = "reminder_type", nullable = false, length = 20) private String reminderType; @Column(name = "remind_at", nullable = false) private LocalDateTime remindAt; @Column(name = "sent_at") private LocalDateTime sentAt; @Column(name = "status", nullable = false, length = 20) @Builder.Default private String status = "SCHEDULED"; @Column(name = "created_at", nullable = false, updatable = false) private LocalDateTime createdAt; @PrePersist void prePersist() { if (createdAt == null) createdAt = LocalDateTime.now(); if (status == null) status = STATUS_SCHEDULED; } }