Files
api-plr/src/main/java/com/pmumali/simple/exception/PariException.java
2025-08-25 18:26:02 +00:00

85 lines
2.4 KiB
Java

package com.pmumali.simple.exception;
/**
* Exception métier pour les erreurs spécifiques aux paris PMU Mali
* conforme aux règles du "Jumelé Placé"
*/
public class PariException extends RuntimeException {
private final ErrorCode errorCode;
private final String details;
// Codes d'erreur standardisés
public enum ErrorCode {
// Article 1 - Règles de base
MISE_MINIMALE_NON_ATTEINTE("La mise minimale est de 500 FCFA"),
// Article 2 - Limitation des enjeux
LIMITE_MISE_DEPASSEE("Limite de mise dépassée (20x500 FCFA maximum)"),
// Article 3 - Dead Heat
CALCUL_RAPPORT_IMPOSSIBLE("Impossible de calculer les rapports pour ce Dead Heat"),
// Article 4 - Non-partants
CHEVAL_NON_PARTANT("Pari invalide : cheval non-partant"),
// Article 5 - Calcul des rapports
RAPPORT_INVALIDE("Rapport calculé invalide (<1.1)"),
// Article 6 - Formules
FORMULE_INVALIDE("Formule de pari invalide"),
// Article 8 - Cas particuliers
COURSE_ANNULEE("Course annulée - paris remboursés"),
// Validations générales
PARI_INVALIDE("Pari invalide"),
SOLDE_INSUFFISANT("Solde insuffisant pour placer ce pari"),
CLIENT_BLOQUE("Compte client bloqué");
private final String message;
ErrorCode(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
}
// Constructeurs
public PariException(ErrorCode errorCode) {
super(errorCode.getMessage());
this.errorCode = errorCode;
this.details = null;
}
public PariException(ErrorCode errorCode, String details) {
super(errorCode.getMessage() + " : " + details);
this.errorCode = errorCode;
this.details = details;
}
public PariException(ErrorCode errorCode, Throwable cause) {
super(errorCode.getMessage(), cause);
this.errorCode = errorCode;
this.details = null;
}
// Getters
public ErrorCode getErrorCode() {
return errorCode;
}
public String getDetails() {
return details;
}
// Méthode utilitaire pour construire les messages
public static String buildLimiteMiseMessage(double limite) {
return String.format("Limite de mise dépassée (max %,.0f FCFA par course selon Article 2)", limite);
}
}