package dev.lions.unionflow.server.entity; import jakarta.persistence.*; import jakarta.validation.constraints.*; import lombok.*; /** * Catalogue des modules métier activables par type d'organisation. * *

Géré uniquement par le Super Admin UnionFlow. * Les organisations ne peuvent pas créer de nouveaux modules. * *

Table : {@code modules_disponibles} */ @Entity @Table( name = "modules_disponibles", indexes = { @Index(name = "idx_module_code", columnList = "code", unique = true), @Index(name = "idx_module_actif", columnList = "actif") }) @Data @NoArgsConstructor @AllArgsConstructor @Builder @EqualsAndHashCode(callSuper = true) public class ModuleDisponible extends BaseEntity { @NotBlank @Column(name = "code", unique = true, nullable = false, length = 50) private String code; @NotBlank @Column(name = "libelle", nullable = false, length = 150) private String libelle; @Column(name = "description", columnDefinition = "TEXT") private String description; /** * JSON array des types d'organisations compatibles. * Exemple : ["MUTUELLE_SANTE","ONG"] ou ["ALL"] pour tous. */ @Column(name = "types_org_compatibles", columnDefinition = "TEXT") private String typesOrgCompatibles; @Builder.Default @Column(name = "ordre_affichage", nullable = false) private Integer ordreAffichage = 0; public boolean estCompatibleAvec(String typeOrganisation) { if (typesOrgCompatibles == null) return false; return typesOrgCompatibles.contains("ALL") || typesOrgCompatibles.contains(typeOrganisation); } }