package com.mydreamjob.onboarding; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.EntityListeners; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; import jakarta.persistence.Table; import jakarta.persistence.UniqueConstraint; import jakarta.persistence.Version; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import org.springframework.data.annotation.CreatedDate; import org.springframework.data.annotation.LastModifiedDate; import org.springframework.data.jpa.domain.support.AuditingEntityListener; import java.time.LocalDateTime; @Data @Builder @NoArgsConstructor @AllArgsConstructor @Entity @Table( name = "student_onboarding_progress", uniqueConstraints = @UniqueConstraint( name = "uk_student_onboarding_progress_student_item", columnNames = {"student_user_id", "item_id"})) @EntityListeners(AuditingEntityListener.class) public class StudentOnboardingProgress { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "student_user_id", nullable = false) private Long studentUserId; @Column(name = "item_id", nullable = false) private Long itemId; @Column(nullable = false) @Builder.Default private Boolean completed = false; @Column(name = "completed_at") private LocalDateTime completedAt; @Version @Column(nullable = false) @Builder.Default private Long version = 0L; @CreatedDate @Column(name = "created_at", nullable = false, updatable = false) private LocalDateTime createdAt; @LastModifiedDate @Column(name = "updated_at", nullable = false) private LocalDateTime updatedAt; }