You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

64 lines
1.9 KiB

package com.mydreamjob.offer;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
/**
* Offer 提醒记录
*
* <p>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;
}
}