Sync: code local unifié
Synchronisation du code source local (fait foi). Signed-off-by: lions dev Team
This commit is contained in:
@@ -0,0 +1,210 @@
|
||||
package dev.lions.unionflow.server.service;
|
||||
|
||||
import dev.lions.unionflow.server.entity.Configuration;
|
||||
import dev.lions.unionflow.server.repository.ConfigurationRepository;
|
||||
import jakarta.enterprise.context.ApplicationScoped;
|
||||
import jakarta.inject.Inject;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Optional;
|
||||
import org.jboss.logging.Logger;
|
||||
|
||||
/**
|
||||
* Service centralisé pour la lecture des valeurs
|
||||
* par défaut depuis la table {@code configurations}.
|
||||
*
|
||||
* <p>
|
||||
* Élimine tous les littéraux magiques
|
||||
* ({@code "XOF"}, {@code "ACTIVE"},
|
||||
* {@code "ASSOCIATION"}, etc.) dispersés dans le
|
||||
* code métier. Chaque service injecte ce service
|
||||
* au lieu de coder en dur ses valeurs par défaut.
|
||||
*
|
||||
* <p>
|
||||
* Clés standardisées :
|
||||
* <ul>
|
||||
* <li>{@code defaut.devise} → {@code XOF}
|
||||
* <li>{@code defaut.statut.organisation}
|
||||
* → {@code ACTIVE}
|
||||
* <li>{@code defaut.type.organisation}
|
||||
* → {@code ASSOCIATION}
|
||||
* <li>{@code defaut.utilisateur.systeme}
|
||||
* → {@code system}
|
||||
* </ul>
|
||||
*
|
||||
* @author UnionFlow Team
|
||||
* @version 3.0
|
||||
* @since 2026-02-21
|
||||
*/
|
||||
@ApplicationScoped
|
||||
public class DefaultsService {
|
||||
|
||||
private static final Logger LOG = Logger.getLogger(DefaultsService.class);
|
||||
|
||||
@Inject
|
||||
ConfigurationRepository configRepo;
|
||||
|
||||
// ── Clés standardisées ─────────────────────
|
||||
|
||||
/** Clé : devise par défaut. */
|
||||
public static final String CLE_DEVISE = "defaut.devise";
|
||||
|
||||
/** Clé : statut organisation par défaut. */
|
||||
public static final String CLE_STATUT_ORG = "defaut.statut.organisation";
|
||||
|
||||
/** Clé : type organisation par défaut. */
|
||||
public static final String CLE_TYPE_ORG = "defaut.type.organisation";
|
||||
|
||||
/** Clé : utilisateur système (audit). */
|
||||
public static final String CLE_USER_SYSTEME = "defaut.utilisateur.systeme";
|
||||
|
||||
/** Clé : montant cotisation par défaut. */
|
||||
public static final String CLE_MONTANT_COTISATION = "defaut.montant.cotisation";
|
||||
|
||||
// ── Fallbacks compilés ─────────────────────
|
||||
|
||||
private static final String FALLBACK_DEVISE = "XOF";
|
||||
private static final String FALLBACK_STATUT_ORG = "ACTIVE";
|
||||
private static final String FALLBACK_TYPE_ORG = "ASSOCIATION";
|
||||
private static final String FALLBACK_USER = "system";
|
||||
|
||||
// ── API publique ───────────────────────────
|
||||
|
||||
/**
|
||||
* Retourne la devise par défaut.
|
||||
*
|
||||
* @return code devise (ex: {@code "XOF"})
|
||||
*/
|
||||
public String getDevise() {
|
||||
return getString(CLE_DEVISE, FALLBACK_DEVISE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retourne le statut par défaut d'une
|
||||
* organisation.
|
||||
*
|
||||
* @return code statut (ex: {@code "ACTIVE"})
|
||||
*/
|
||||
public String getStatutOrganisation() {
|
||||
return getString(
|
||||
CLE_STATUT_ORG, FALLBACK_STATUT_ORG);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retourne le type par défaut d'une
|
||||
* organisation.
|
||||
*
|
||||
* @return code type (ex: {@code "ASSOCIATION"})
|
||||
*/
|
||||
public String getTypeOrganisation() {
|
||||
return getString(
|
||||
CLE_TYPE_ORG, FALLBACK_TYPE_ORG);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retourne le nom de l'utilisateur système.
|
||||
*
|
||||
* @return identifiant système
|
||||
*/
|
||||
public String getUtilisateurSysteme() {
|
||||
return getString(CLE_USER_SYSTEME, FALLBACK_USER);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retourne le montant de cotisation par défaut.
|
||||
*
|
||||
* @return montant ou {@code BigDecimal.ZERO}
|
||||
*/
|
||||
public BigDecimal getMontantCotisation() {
|
||||
return getDecimal(
|
||||
CLE_MONTANT_COTISATION, BigDecimal.ZERO);
|
||||
}
|
||||
|
||||
// ── Méthodes utilitaires ───────────────────
|
||||
|
||||
/**
|
||||
* Lit une valeur String depuis la table
|
||||
* {@code configurations}.
|
||||
*
|
||||
* @param cle clé de configuration
|
||||
* @param fallback valeur de repli
|
||||
* @return la valeur en base ou le fallback
|
||||
*/
|
||||
public String getString(
|
||||
String cle, String fallback) {
|
||||
try {
|
||||
Optional<Configuration> config = configRepo.findByCle(cle);
|
||||
if (config.isPresent()
|
||||
&& config.get().getValeur() != null
|
||||
&& !config.get().getValeur().isBlank()) {
|
||||
return config.get().getValeur();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
LOG.debugf(
|
||||
"Configuration '%s' indisponible: %s",
|
||||
cle, e.getMessage());
|
||||
}
|
||||
return fallback;
|
||||
}
|
||||
|
||||
/**
|
||||
* Lit une valeur BigDecimal depuis la table
|
||||
* {@code configurations}.
|
||||
*
|
||||
* @param cle clé de configuration
|
||||
* @param fallback valeur de repli
|
||||
* @return la valeur en base ou le fallback
|
||||
*/
|
||||
public BigDecimal getDecimal(
|
||||
String cle, BigDecimal fallback) {
|
||||
String val = getString(cle, null);
|
||||
if (val != null) {
|
||||
try {
|
||||
return new BigDecimal(val);
|
||||
} catch (NumberFormatException e) {
|
||||
LOG.warnf(
|
||||
"Valeur non numérique pour '%s': %s",
|
||||
cle, val);
|
||||
}
|
||||
}
|
||||
return fallback;
|
||||
}
|
||||
|
||||
/**
|
||||
* Lit une valeur Boolean depuis la table
|
||||
* {@code configurations}.
|
||||
*
|
||||
* @param cle clé de configuration
|
||||
* @param fallback valeur de repli
|
||||
* @return la valeur en base ou le fallback
|
||||
*/
|
||||
public boolean getBoolean(
|
||||
String cle, boolean fallback) {
|
||||
String val = getString(cle, null);
|
||||
if (val != null) {
|
||||
return Boolean.parseBoolean(val);
|
||||
}
|
||||
return fallback;
|
||||
}
|
||||
|
||||
/**
|
||||
* Lit une valeur int depuis la table
|
||||
* {@code configurations}.
|
||||
*
|
||||
* @param cle clé de configuration
|
||||
* @param fallback valeur de repli
|
||||
* @return la valeur en base ou le fallback
|
||||
*/
|
||||
public int getInt(String cle, int fallback) {
|
||||
String val = getString(cle, null);
|
||||
if (val != null) {
|
||||
try {
|
||||
return Integer.parseInt(val);
|
||||
} catch (NumberFormatException e) {
|
||||
LOG.warnf(
|
||||
"Valeur non entière pour '%s': %s",
|
||||
cle, val);
|
||||
}
|
||||
}
|
||||
return fallback;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user