package db import ( "time" "github.com/google/uuid" "gorm.io/gorm" ) type Log struct { LogID uuid.UUID `gorm:"type:uuid;default:uuid_generate_v4();primaryKey" json:"id"` Level string `gorm:"size:10;not null"` // "info", "error", etc. Message string `gorm:"not null"` Service string `gorm:"size:50"` Metadata JSONB `gorm:"type:jsonb"` // fields (e.g., {"user_id": 123}) CreatedAt time.Time `gorm:"index"` Checked bool `gorm:"type:boolean;default:false"` UpdatedAt time.Time DeletedAt gorm.DeletedAt `gorm:"index"` } // 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 GetLogs(level string, limit int, service string) ([]Log, error) { var logs []Log err := DB.Where("level = ? and service = ?", level, service).Limit(limit).Find(&logs).Error return logs, err } // DeleteOldLogs removes logs older than `days` and by level. func DeleteOldLogs(days int, level string) error { return DB.Where("created_at < ? and level = ?", time.Now().AddDate(0, 0, -days), level).Delete(&Log{}).Error }