package com.dalab.autocompliance.model.entity; import java.util.List; import java.util.Map; import org.hibernate.annotations.JdbcTypeCode; import org.hibernate.type.SqlTypes; import jakarta.persistence.CollectionTable; import jakarta.persistence.Column; import jakarta.persistence.ElementCollection; import jakarta.persistence.Entity; import jakarta.persistence.FetchType; import jakarta.persistence.Id; import jakarta.persistence.Index; import jakarta.persistence.JoinColumn; import jakarta.persistence.Lob; import jakarta.persistence.Table; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; @Entity @Table(name = "compliance_controls", indexes = { @Index(name = "idx_control_severity", columnList = "severity"), @Index(name = "idx_control_enabled", columnList = "enabled") }) @Data @EqualsAndHashCode(callSuper = true) @NoArgsConstructor @AllArgsConstructor @Builder public class ComplianceControlEntity extends AbstractAuditableEntity { @Id @Column(nullable = false, unique = true, length = 100) private String controlId; @Column(nullable = false, length = 255) private String name; @Lob @JdbcTypeCode(SqlTypes.LONGVARCHAR) private String description; @Column(length = 50) private String severity; @ElementCollection(fetch = FetchType.EAGER) @CollectionTable(name = "control_frameworks", joinColumns = @JoinColumn(name = "control_id")) @Column(name = "framework_name") private List applicableFrameworks; @ElementCollection(fetch = FetchType.EAGER) @CollectionTable(name = "control_asset_types", joinColumns = @JoinColumn(name = "control_id")) @Column(name = "asset_type") private List targetAssetTypes; @Lob @JdbcTypeCode(SqlTypes.LONGVARCHAR) private String remediationSteps; @JdbcTypeCode(SqlTypes.JSON) @Column(columnDefinition = "jsonb") private Map evaluationParametersDefinition; @Column(length = 512) private String detailsLink; @Builder.Default private boolean enabled = true; }