package db import "time" type Log struct { ID uint `gorm:"primaryKey"` Level string `gorm:"size:10;not null"` // "info", "error", etc. Message string `gorm:"not null"` Service string `gorm:"size:50"` // Optional: service name Metadata JSONB `gorm:"type:jsonb"` // Structured fields (e.g., {"user_id": 123}) CreatedAt time.Time `gorm:"index"` // Auto-set by GORM Checked bool `gorm:"type:boolean;default:false"` } // JSONB is a helper type for PostgreSQL JSONB fields. type JSONB map[string]interface{} // --- CRUD Operations --- // CreateLog inserts a new log entry. func CreateLog(level, message, service string, metadata JSONB) error { log := Log{ Level: level, Message: message, Service: service, Metadata: metadata, } return DB.Create(&log).Error } // GetLogsByLevel fetches logs filtered by severity. func GetLogsByLevel(level string, limit int) ([]Log, error) { var logs []Log err := DB.Where("level = ?", level).Limit(limit).Find(&logs).Error return logs, err } // DeleteOldLogs removes logs older than `days`. func DeleteOldLogs(days int) error { return DB.Where("created_at < ?", time.Now().AddDate(0, 0, -days)).Delete(&Log{}).Error }