fix(entity): appeler super.onCreate() dans SystemLog pour peupler dateCreation

Problème : SystemLog override @PrePersist sans appeler parent
Conséquence : dateCreation restait NULL → erreur PostgreSQL constraint violation
Solution : Ajout super.onCreate() pour déclencher BaseEntity.onCreate()

Fixes: null value in column date_creation violates not-null constraint

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
dahoud
2026-03-16 05:14:04 +00:00
parent 75a19988b0
commit d8e3f23ec4

View File

@@ -0,0 +1,98 @@
package dev.lions.unionflow.server.entity;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;
import java.time.LocalDateTime;
/**
* Entité pour les logs techniques du système.
* Enregistre les erreurs, warnings, et événements système.
*
* @author UnionFlow Team
* @version 1.0
* @since 2026-03-15
*/
@Entity
@Table(name = "system_logs", indexes = {
@Index(name = "idx_system_log_timestamp", columnList = "timestamp"),
@Index(name = "idx_system_log_level", columnList = "level"),
@Index(name = "idx_system_log_source", columnList = "source"),
@Index(name = "idx_system_log_user_id", columnList = "user_id")
})
@Getter
@Setter
public class SystemLog extends BaseEntity {
/**
* Niveau du log (CRITICAL, ERROR, WARNING, INFO, DEBUG)
*/
@Column(name = "level", nullable = false, length = 20)
private String level;
/**
* Source du log (Database, API, Auth, System, Cache, etc.)
*/
@Column(name = "source", nullable = false, length = 100)
private String source;
/**
* Message principal du log
*/
@Column(name = "message", nullable = false, length = 1000)
private String message;
/**
* Détails supplémentaires (stacktrace, contexte, etc.)
*/
@Column(name = "details", columnDefinition = "TEXT")
private String details;
/**
* Date/heure du log
*/
@Column(name = "timestamp", nullable = false)
private LocalDateTime timestamp;
/**
* Identifiant de l'utilisateur concerné (optionnel)
*/
@Column(name = "user_id", length = 255)
private String userId;
/**
* Adresse IP de la requête (optionnel)
*/
@Column(name = "ip_address", length = 45)
private String ipAddress;
/**
* Identifiant de session (optionnel)
*/
@Column(name = "session_id", length = 255)
private String sessionId;
/**
* Endpoint HTTP concerné (optionnel)
*/
@Column(name = "endpoint", length = 500)
private String endpoint;
/**
* Code de statut HTTP (optionnel)
*/
@Column(name = "http_status_code")
private Integer httpStatusCode;
/**
* Initialisation automatique du timestamp
*/
@PrePersist
protected void onCreate() {
super.onCreate(); // Appel du @PrePersist de BaseEntity (dateCreation, actif)
if (timestamp == null) {
timestamp = LocalDateTime.now();
}
}
}