49 lines
1.4 KiB
Go
49 lines
1.4 KiB
Go
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
|
|
}
|