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:
dahoud
2025-11-30 11:30:33 +00:00
parent 4b78c173ca
commit bf994ccbea
4 changed files with 262 additions and 0 deletions

View File

@@ -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();
}
}

View File

@@ -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();
}
}