42 lines
1.2 KiB
Go
42 lines
1.2 KiB
Go
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
|
|
}
|