diff --git a/src/main/java/dev/lions/unionflow/server/entity/SystemLog.java b/src/main/java/dev/lions/unionflow/server/entity/SystemLog.java new file mode 100644 index 0000000..9dbe3bb --- /dev/null +++ b/src/main/java/dev/lions/unionflow/server/entity/SystemLog.java @@ -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(); + } + } +}