63 lines
1.8 KiB
Go
63 lines
1.8 KiB
Go
package persistence
|
|
|
|
import (
|
|
"RenewCMS/internal/domain/audit"
|
|
"RenewCMS/internal/infrastructure/persistence/mappers"
|
|
entity "RenewCMS/internal/infrastructure/persistence/models"
|
|
"errors"
|
|
"time"
|
|
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
const auditSettingsRowID uint32 = 1
|
|
|
|
type AuditSettingsRepository struct {
|
|
db *gorm.DB
|
|
}
|
|
|
|
var _ audit.SettingsRepository = &AuditSettingsRepository{}
|
|
|
|
func NewAuditSettingsRepository(db *gorm.DB) *AuditSettingsRepository {
|
|
return &AuditSettingsRepository{db}
|
|
}
|
|
|
|
func (a *AuditSettingsRepository) Get() (audit.Settings, error) {
|
|
var model entity.AuditSettings
|
|
err := a.db.First(&model, auditSettingsRowID).Error
|
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
return audit.DefaultSettings(), nil
|
|
}
|
|
if err != nil {
|
|
return audit.Settings{}, err
|
|
}
|
|
return mappers.AuditSettingsToDomain(model), nil
|
|
}
|
|
|
|
func (a *AuditSettingsRepository) SaveRetention(days int, maxGB int) error {
|
|
return a.update(map[string]any{"retention_days": days, "retention_max_gb": maxGB}, func(settings *audit.Settings) {
|
|
settings.RetentionDays = days
|
|
settings.RetentionMaxGB = maxGB
|
|
})
|
|
}
|
|
|
|
func (a *AuditSettingsRepository) SaveLastCleanup(at time.Time, removed int) error {
|
|
utc := at.UTC()
|
|
return a.update(map[string]any{"last_cleanup_at": utc, "last_cleanup_removed": removed}, func(settings *audit.Settings) {
|
|
settings.LastCleanupAt = &utc
|
|
settings.LastCleanupRemoved = removed
|
|
})
|
|
}
|
|
|
|
func (a *AuditSettingsRepository) update(columns map[string]any, apply func(*audit.Settings)) error {
|
|
result := a.db.Model(&entity.AuditSettings{}).Where("id = ?", auditSettingsRowID).Updates(columns)
|
|
if result.Error != nil || result.RowsAffected > 0 {
|
|
return result.Error
|
|
}
|
|
settings := audit.DefaultSettings()
|
|
apply(&settings)
|
|
model := mappers.AuditSettingsToModel(settings)
|
|
model.ID = auditSettingsRowID
|
|
return a.db.Create(&model).Error
|
|
}
|