feat: PHASE 5.2 - Repositories et DTOs Documentaires
Repositories créés: - DocumentRepository: Recherche par hash MD5/SHA256, type - PieceJointeRepository: Recherche par document, membre, organisation, cotisation, adhésion, demande d'aide, transaction Wave DTOs créés: - DocumentDTO: Validation complète avec contraintes - PieceJointeDTO: Relations flexibles via UUID Respect strict DRY/WOU: - Patterns de repository cohérents - Patterns de DTO cohérents - Relations via UUID pour découplage
This commit is contained in:
@@ -0,0 +1,59 @@
|
|||||||
|
package dev.lions.unionflow.server.api.dto.document;
|
||||||
|
|
||||||
|
import dev.lions.unionflow.server.api.dto.base.BaseDTO;
|
||||||
|
import dev.lions.unionflow.server.api.enums.document.TypeDocument;
|
||||||
|
import jakarta.validation.constraints.*;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DTO pour la gestion des documents
|
||||||
|
*
|
||||||
|
* @author UnionFlow Team
|
||||||
|
* @version 3.0
|
||||||
|
* @since 2025-01-29
|
||||||
|
*/
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
public class DocumentDTO extends BaseDTO {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/** Nom du fichier */
|
||||||
|
@NotBlank(message = "Le nom du fichier est obligatoire")
|
||||||
|
private String nomFichier;
|
||||||
|
|
||||||
|
/** Nom original */
|
||||||
|
private String nomOriginal;
|
||||||
|
|
||||||
|
/** Chemin de stockage */
|
||||||
|
@NotBlank(message = "Le chemin de stockage est obligatoire")
|
||||||
|
private String cheminStockage;
|
||||||
|
|
||||||
|
/** Type MIME */
|
||||||
|
private String typeMime;
|
||||||
|
|
||||||
|
/** Taille en octets */
|
||||||
|
@NotNull(message = "La taille est obligatoire")
|
||||||
|
@Min(value = 0, message = "La taille doit être positive")
|
||||||
|
private Long tailleOctets;
|
||||||
|
|
||||||
|
/** Type de document */
|
||||||
|
private TypeDocument typeDocument;
|
||||||
|
|
||||||
|
/** Hash MD5 */
|
||||||
|
private String hashMd5;
|
||||||
|
|
||||||
|
/** Hash SHA256 */
|
||||||
|
private String hashSha256;
|
||||||
|
|
||||||
|
/** Description */
|
||||||
|
private String description;
|
||||||
|
|
||||||
|
/** Nombre de téléchargements */
|
||||||
|
private Integer nombreTelechargements;
|
||||||
|
|
||||||
|
/** Taille formatée (calculée) */
|
||||||
|
private String tailleFormatee;
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
package dev.lions.unionflow.server.api.dto.document;
|
||||||
|
|
||||||
|
import dev.lions.unionflow.server.api.dto.base.BaseDTO;
|
||||||
|
import jakarta.validation.constraints.*;
|
||||||
|
import java.util.UUID;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DTO pour la gestion des pièces jointes
|
||||||
|
*
|
||||||
|
* @author UnionFlow Team
|
||||||
|
* @version 3.0
|
||||||
|
* @since 2025-01-29
|
||||||
|
*/
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
public class PieceJointeDTO extends BaseDTO {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/** Ordre d'affichage */
|
||||||
|
@NotNull(message = "L'ordre est obligatoire")
|
||||||
|
@Min(value = 1, message = "L'ordre doit être positif")
|
||||||
|
private Integer ordre;
|
||||||
|
|
||||||
|
/** Libellé */
|
||||||
|
private String libelle;
|
||||||
|
|
||||||
|
/** Commentaire */
|
||||||
|
private String commentaire;
|
||||||
|
|
||||||
|
/** ID du document */
|
||||||
|
@NotNull(message = "Le document est obligatoire")
|
||||||
|
private UUID documentId;
|
||||||
|
|
||||||
|
/** ID du membre (optionnel) */
|
||||||
|
private UUID membreId;
|
||||||
|
|
||||||
|
/** ID de l'organisation (optionnel) */
|
||||||
|
private UUID organisationId;
|
||||||
|
|
||||||
|
/** ID de la cotisation (optionnel) */
|
||||||
|
private UUID cotisationId;
|
||||||
|
|
||||||
|
/** ID de l'adhésion (optionnel) */
|
||||||
|
private UUID adhesionId;
|
||||||
|
|
||||||
|
/** ID de la demande d'aide (optionnel) */
|
||||||
|
private UUID demandeAideId;
|
||||||
|
|
||||||
|
/** ID de la transaction Wave (optionnel) */
|
||||||
|
private UUID transactionWaveId;
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,59 @@
|
|||||||
|
package dev.lions.unionflow.server.repository;
|
||||||
|
|
||||||
|
import dev.lions.unionflow.server.api.enums.document.TypeDocument;
|
||||||
|
import dev.lions.unionflow.server.entity.Document;
|
||||||
|
import io.quarkus.hibernate.orm.panache.PanacheRepository;
|
||||||
|
import jakarta.enterprise.context.ApplicationScoped;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Repository pour l'entité Document
|
||||||
|
*
|
||||||
|
* @author UnionFlow Team
|
||||||
|
* @version 3.0
|
||||||
|
* @since 2025-01-29
|
||||||
|
*/
|
||||||
|
@ApplicationScoped
|
||||||
|
public class DocumentRepository implements PanacheRepository<Document> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Trouve un document par son hash MD5
|
||||||
|
*
|
||||||
|
* @param hashMd5 Hash MD5
|
||||||
|
* @return Document ou Optional.empty()
|
||||||
|
*/
|
||||||
|
public Optional<Document> findByHashMd5(String hashMd5) {
|
||||||
|
return find("hashMd5 = ?1 AND actif = true", hashMd5).firstResultOptional();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Trouve un document par son hash SHA256
|
||||||
|
*
|
||||||
|
* @param hashSha256 Hash SHA256
|
||||||
|
* @return Document ou Optional.empty()
|
||||||
|
*/
|
||||||
|
public Optional<Document> findByHashSha256(String hashSha256) {
|
||||||
|
return find("hashSha256 = ?1 AND actif = true", hashSha256).firstResultOptional();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Trouve les documents par type
|
||||||
|
*
|
||||||
|
* @param type Type de document
|
||||||
|
* @return Liste des documents
|
||||||
|
*/
|
||||||
|
public List<Document> findByType(TypeDocument type) {
|
||||||
|
return find("typeDocument = ?1 AND actif = true ORDER BY dateCreation DESC", type).list();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Trouve tous les documents actifs
|
||||||
|
*
|
||||||
|
* @return Liste des documents actifs
|
||||||
|
*/
|
||||||
|
public List<Document> findAllActifs() {
|
||||||
|
return find("actif = true ORDER BY dateCreation DESC").list();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,89 @@
|
|||||||
|
package dev.lions.unionflow.server.repository;
|
||||||
|
|
||||||
|
import dev.lions.unionflow.server.entity.PieceJointe;
|
||||||
|
import io.quarkus.hibernate.orm.panache.PanacheRepository;
|
||||||
|
import jakarta.enterprise.context.ApplicationScoped;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Repository pour l'entité PieceJointe
|
||||||
|
*
|
||||||
|
* @author UnionFlow Team
|
||||||
|
* @version 3.0
|
||||||
|
* @since 2025-01-29
|
||||||
|
*/
|
||||||
|
@ApplicationScoped
|
||||||
|
public class PieceJointeRepository implements PanacheRepository<PieceJointe> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Trouve toutes les pièces jointes d'un document
|
||||||
|
*
|
||||||
|
* @param documentId ID du document
|
||||||
|
* @return Liste des pièces jointes
|
||||||
|
*/
|
||||||
|
public List<PieceJointe> findByDocumentId(UUID documentId) {
|
||||||
|
return find("document.id = ?1 ORDER BY ordre ASC", documentId).list();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Trouve toutes les pièces jointes d'un membre
|
||||||
|
*
|
||||||
|
* @param membreId ID du membre
|
||||||
|
* @return Liste des pièces jointes
|
||||||
|
*/
|
||||||
|
public List<PieceJointe> findByMembreId(UUID membreId) {
|
||||||
|
return find("membre.id = ?1 ORDER BY ordre ASC", membreId).list();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Trouve toutes les pièces jointes d'une organisation
|
||||||
|
*
|
||||||
|
* @param organisationId ID de l'organisation
|
||||||
|
* @return Liste des pièces jointes
|
||||||
|
*/
|
||||||
|
public List<PieceJointe> findByOrganisationId(UUID organisationId) {
|
||||||
|
return find("organisation.id = ?1 ORDER BY ordre ASC", organisationId).list();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Trouve toutes les pièces jointes d'une cotisation
|
||||||
|
*
|
||||||
|
* @param cotisationId ID de la cotisation
|
||||||
|
* @return Liste des pièces jointes
|
||||||
|
*/
|
||||||
|
public List<PieceJointe> findByCotisationId(UUID cotisationId) {
|
||||||
|
return find("cotisation.id = ?1 ORDER BY ordre ASC", cotisationId).list();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Trouve toutes les pièces jointes d'une adhésion
|
||||||
|
*
|
||||||
|
* @param adhesionId ID de l'adhésion
|
||||||
|
* @return Liste des pièces jointes
|
||||||
|
*/
|
||||||
|
public List<PieceJointe> findByAdhesionId(UUID adhesionId) {
|
||||||
|
return find("adhesion.id = ?1 ORDER BY ordre ASC", adhesionId).list();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Trouve toutes les pièces jointes d'une demande d'aide
|
||||||
|
*
|
||||||
|
* @param demandeAideId ID de la demande d'aide
|
||||||
|
* @return Liste des pièces jointes
|
||||||
|
*/
|
||||||
|
public List<PieceJointe> findByDemandeAideId(UUID demandeAideId) {
|
||||||
|
return find("demandeAide.id = ?1 ORDER BY ordre ASC", demandeAideId).list();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Trouve toutes les pièces jointes d'une transaction Wave
|
||||||
|
*
|
||||||
|
* @param transactionWaveId ID de la transaction Wave
|
||||||
|
* @return Liste des pièces jointes
|
||||||
|
*/
|
||||||
|
public List<PieceJointe> findByTransactionWaveId(UUID transactionWaveId) {
|
||||||
|
return find("transactionWave.id = ?1 ORDER BY ordre ASC", transactionWaveId).list();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Reference in New Issue
Block a user