package com.mydreamjob.recommendation; import jakarta.persistence.*; import lombok.*; import org.hibernate.annotations.JdbcTypeCode; import org.hibernate.type.SqlTypes; 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 = "job_recommendation_profiles") @EntityListeners(AuditingEntityListener.class) public class JobRecommendationProfile { public static final String PENDING_REVIEW = "PENDING_REVIEW"; public static final String APPROVED = "APPROVED"; public static final String REJECTED = "REJECTED"; public static final String DISABLED = "DISABLED"; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "job_id", nullable = false, unique = true) private Long jobId; @Column(name = "industry_code", nullable = false, length = 64) private String industryCode; @Column(name = "job_family_code", nullable = false, length = 64) private String jobFamilyCode; @Column(name = "riasec_weights_json", columnDefinition = "TEXT") private String riasecWeightsJson; @Column(name = "ability_expectations_json", columnDefinition = "TEXT") private String abilityExpectationsJson; @JdbcTypeCode(SqlTypes.TINYINT) @Column(nullable = false) @Builder.Default private Boolean enabled = true; @Column(name = "review_status", nullable = false, length = 20) @Builder.Default private String reviewStatus = PENDING_REVIEW; @Column(name = "review_reason", length = 40) private String reviewReason; @Column(name = "reviewed_by_user_id") private Long reviewedByUserId; @Column(name = "reviewed_at") private LocalDateTime reviewedAt; @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; }