feat(backend): consolidation finale Spec 001 LCB-FT + Flyway V1-V5

Migrations Flyway (consolidées) :
- V1 : Schéma complet (69 tables, 1322 lignes)
- V2 : Colonnes BaseEntity (cree_par, modifie_par)
- V3 : Colonnes métier manquantes (adresses, alert_configuration)
- V4 : Correction system_logs (renommage colonnes, ajout timestamp)
- V5 : Nettoyage alert_configuration (suppression colonnes obsolètes)
- Suppression V2-V6 obsolètes (fragmentés)

Entités LCB-FT :
- AlerteLcbFt : Alertes anti-blanchiment
- AlertConfiguration : Configuration alertes
- SystemAlert : Alertes système
- SystemLog : Logs techniques (DÉJÀ COMMITÉE avec super.onCreate fix)

Services LCB-FT (T015, T016) :
- AlerteLcbFtService + Resource : Dashboard alertes admin
- AlertMonitoringService : Surveillance transactions
- SystemLoggingService : Logs centralisés
- FileStorageService : Upload documents

Repositories :
- AlerteLcbFtRepository
- AlertConfigurationRepository
- SystemAlertRepository
- SystemLogRepository

Tests :
- GlobalExceptionMapperTest : 17 erreurs corrigées (toResponse())

Spec 001 : 27/27 tâches (100%)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
dahoud
2026-03-16 05:15:17 +00:00
parent d8e3f23ec4
commit 347d89cc02
22 changed files with 3668 additions and 3129 deletions

View File

@@ -0,0 +1,118 @@
package dev.lions.unionflow.server.entity;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;
import java.time.LocalDateTime;
/**
* Entité pour les alertes système.
* Enregistre les alertes de seuils dépassés, erreurs critiques, etc.
*
* @author UnionFlow Team
* @version 1.0
* @since 2026-03-15
*/
@Entity
@Table(name = "system_alerts", indexes = {
@Index(name = "idx_system_alert_timestamp", columnList = "timestamp"),
@Index(name = "idx_system_alert_level", columnList = "level"),
@Index(name = "idx_system_alert_acknowledged", columnList = "acknowledged"),
@Index(name = "idx_system_alert_source", columnList = "source")
})
@Getter
@Setter
public class SystemAlert extends BaseEntity {
/**
* Niveau de l'alerte (CRITICAL, ERROR, WARNING, INFO)
*/
@Column(name = "level", nullable = false, length = 20)
private String level;
/**
* Titre court de l'alerte
*/
@Column(name = "title", nullable = false, length = 255)
private String title;
/**
* Message détaillé de l'alerte
*/
@Column(name = "message", nullable = false, length = 1000)
private String message;
/**
* Date/heure de création de l'alerte
*/
@Column(name = "timestamp", nullable = false)
private LocalDateTime timestamp;
/**
* Alerte acquittée ou non
*/
@Column(name = "acknowledged", nullable = false)
private Boolean acknowledged = false;
/**
* Email de l'utilisateur ayant acquitté l'alerte
*/
@Column(name = "acknowledged_by", length = 255)
private String acknowledgedBy;
/**
* Date/heure d'acquittement
*/
@Column(name = "acknowledged_at")
private LocalDateTime acknowledgedAt;
/**
* Source de l'alerte (CPU, MEMORY, DISK, DATABASE, etc.)
*/
@Column(name = "source", length = 100)
private String source;
/**
* Type d'alerte (THRESHOLD, INFO, ERROR, etc.)
*/
@Column(name = "alert_type", length = 50)
private String alertType;
/**
* Valeur actuelle ayant déclenché l'alerte
*/
@Column(name = "current_value")
private Double currentValue;
/**
* Valeur seuil dépassée
*/
@Column(name = "threshold_value")
private Double thresholdValue;
/**
* Unité de mesure (%, MB, GB, ms, etc.)
*/
@Column(name = "unit", length = 20)
private String unit;
/**
* Actions recommandées pour résoudre l'alerte
*/
@Column(name = "recommended_actions", columnDefinition = "TEXT")
private String recommendedActions;
/**
* Initialisation automatique du timestamp
*/
@PrePersist
protected void onCreate() {
if (timestamp == null) {
timestamp = LocalDateTime.now();
}
if (acknowledged == null) {
acknowledged = false;
}
}
}