85 lines
2.4 KiB
Java
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);
|
|
}
|
|
}
|