feat: DTOs, Services et Resources REST pour Paiements et Wave
DTOs créés: - PaiementDTO avec validation complète - CompteWaveDTO avec validation format téléphone - TransactionWaveDTO avec tous les champs nécessaires Services créés: - PaiementService: CRUD complet, validation, annulation, calculs - WaveService: Gestion comptes Wave, transactions, vérification Resources REST créées: - PaiementResource: Endpoints CRUD, validation, annulation, recherche - WaveResource: Endpoints comptes et transactions Wave Respect strict DRY/WOU: - Patterns de service cohérents avec MembreService - Patterns de resource cohérents avec OrganisationResource - Gestion d'erreurs standardisée - Validation complète des DTOs
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
package dev.lions.unionflow.server.api.dto.paiement;
|
||||
|
||||
import dev.lions.unionflow.server.api.dto.base.BaseDTO;
|
||||
import dev.lions.unionflow.server.api.enums.paiement.MethodePaiement;
|
||||
import dev.lions.unionflow.server.api.enums.paiement.StatutPaiement;
|
||||
import jakarta.validation.constraints.*;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.UUID;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
/**
|
||||
* DTO pour la gestion des paiements
|
||||
*
|
||||
* @author UnionFlow Team
|
||||
* @version 3.0
|
||||
* @since 2025-01-29
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
public class PaiementDTO extends BaseDTO {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** Numéro de référence unique */
|
||||
@NotBlank(message = "Le numéro de référence est obligatoire")
|
||||
private String numeroReference;
|
||||
|
||||
/** Montant du paiement */
|
||||
@NotNull(message = "Le montant est obligatoire")
|
||||
@DecimalMin(value = "0.0", message = "Le montant doit être positif")
|
||||
@Digits(integer = 12, fraction = 2)
|
||||
private BigDecimal montant;
|
||||
|
||||
/** Code devise (ISO 3 lettres) */
|
||||
@NotBlank(message = "Le code devise est obligatoire")
|
||||
@Pattern(regexp = "^[A-Z]{3}$", message = "Le code devise doit être un code ISO à 3 lettres")
|
||||
private String codeDevise;
|
||||
|
||||
/** Méthode de paiement */
|
||||
@NotNull(message = "La méthode de paiement est obligatoire")
|
||||
private MethodePaiement methodePaiement;
|
||||
|
||||
/** Statut du paiement */
|
||||
@NotNull(message = "Le statut du paiement est obligatoire")
|
||||
private StatutPaiement statutPaiement;
|
||||
|
||||
/** Date de paiement */
|
||||
private LocalDateTime datePaiement;
|
||||
|
||||
/** Date de validation */
|
||||
private LocalDateTime dateValidation;
|
||||
|
||||
/** Validateur (email de l'administrateur) */
|
||||
private String validateur;
|
||||
|
||||
/** Référence externe */
|
||||
private String referenceExterne;
|
||||
|
||||
/** URL de preuve de paiement */
|
||||
private String urlPreuve;
|
||||
|
||||
/** Commentaires et notes */
|
||||
private String commentaire;
|
||||
|
||||
/** Adresse IP de l'initiateur */
|
||||
private String ipAddress;
|
||||
|
||||
/** User-Agent de l'initiateur */
|
||||
private String userAgent;
|
||||
|
||||
/** ID du membre payeur */
|
||||
@NotNull(message = "Le membre payeur est obligatoire")
|
||||
private UUID membreId;
|
||||
|
||||
/** ID de la transaction Wave (si applicable) */
|
||||
private UUID transactionWaveId;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
package dev.lions.unionflow.server.api.dto.wave;
|
||||
|
||||
import dev.lions.unionflow.server.api.dto.base.BaseDTO;
|
||||
import dev.lions.unionflow.server.api.enums.wave.StatutCompteWave;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.Pattern;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.UUID;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
/**
|
||||
* DTO pour la gestion des comptes Wave
|
||||
*
|
||||
* @author UnionFlow Team
|
||||
* @version 3.0
|
||||
* @since 2025-01-29
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
public class CompteWaveDTO extends BaseDTO {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** Numéro de téléphone Wave */
|
||||
@NotBlank(message = "Le numéro de téléphone est obligatoire")
|
||||
@Pattern(
|
||||
regexp = "^\\+225[0-9]{8}$",
|
||||
message = "Le numéro de téléphone Wave doit être au format +225XXXXXXXX")
|
||||
private String numeroTelephone;
|
||||
|
||||
/** Statut du compte */
|
||||
private StatutCompteWave statutCompte;
|
||||
|
||||
/** Identifiant Wave API (encrypté) */
|
||||
private String waveAccountId;
|
||||
|
||||
/** Environnement (SANDBOX ou PRODUCTION) */
|
||||
private String environnement;
|
||||
|
||||
/** Date de dernière vérification */
|
||||
private LocalDateTime dateDerniereVerification;
|
||||
|
||||
/** Commentaires */
|
||||
private String commentaire;
|
||||
|
||||
/** ID de l'organisation (si compte d'organisation) */
|
||||
private UUID organisationId;
|
||||
|
||||
/** ID du membre (si compte de membre) */
|
||||
private UUID membreId;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,87 @@
|
||||
package dev.lions.unionflow.server.api.dto.wave;
|
||||
|
||||
import dev.lions.unionflow.server.api.dto.base.BaseDTO;
|
||||
import dev.lions.unionflow.server.api.enums.wave.StatutTransactionWave;
|
||||
import dev.lions.unionflow.server.api.enums.wave.TypeTransactionWave;
|
||||
import jakarta.validation.constraints.*;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.UUID;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
/**
|
||||
* DTO pour la gestion des transactions Wave
|
||||
*
|
||||
* @author UnionFlow Team
|
||||
* @version 3.0
|
||||
* @since 2025-01-29
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
public class TransactionWaveDTO extends BaseDTO {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** Identifiant Wave de la transaction */
|
||||
@NotBlank(message = "L'identifiant Wave est obligatoire")
|
||||
private String waveTransactionId;
|
||||
|
||||
/** Identifiant de requête Wave */
|
||||
private String waveRequestId;
|
||||
|
||||
/** Référence Wave */
|
||||
private String waveReference;
|
||||
|
||||
/** Type de transaction */
|
||||
@NotNull(message = "Le type de transaction est obligatoire")
|
||||
private TypeTransactionWave typeTransaction;
|
||||
|
||||
/** Statut de la transaction */
|
||||
@NotNull(message = "Le statut de la transaction est obligatoire")
|
||||
private StatutTransactionWave statutTransaction;
|
||||
|
||||
/** Montant de la transaction */
|
||||
@NotNull(message = "Le montant est obligatoire")
|
||||
@DecimalMin(value = "0.0", message = "Le montant doit être positif")
|
||||
@Digits(integer = 12, fraction = 2)
|
||||
private BigDecimal montant;
|
||||
|
||||
/** Frais de transaction */
|
||||
@DecimalMin(value = "0.0")
|
||||
@Digits(integer = 10, fraction = 2)
|
||||
private BigDecimal frais;
|
||||
|
||||
/** Montant net */
|
||||
@DecimalMin(value = "0.0")
|
||||
@Digits(integer = 12, fraction = 2)
|
||||
private BigDecimal montantNet;
|
||||
|
||||
/** Code devise */
|
||||
@NotBlank(message = "Le code devise est obligatoire")
|
||||
@Pattern(regexp = "^[A-Z]{3}$", message = "Le code devise doit être un code ISO à 3 lettres")
|
||||
private String codeDevise;
|
||||
|
||||
/** Numéro téléphone payeur */
|
||||
private String telephonePayeur;
|
||||
|
||||
/** Numéro téléphone bénéficiaire */
|
||||
private String telephoneBeneficiaire;
|
||||
|
||||
/** Métadonnées JSON */
|
||||
private String metadonnees;
|
||||
|
||||
/** Nombre de tentatives */
|
||||
private Integer nombreTentatives;
|
||||
|
||||
/** Date de dernière tentative */
|
||||
private LocalDateTime dateDerniereTentative;
|
||||
|
||||
/** Message d'erreur */
|
||||
private String messageErreur;
|
||||
|
||||
/** ID du compte Wave */
|
||||
@NotNull(message = "Le compte Wave est obligatoire")
|
||||
private UUID compteWaveId;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user