feat: activity log backend foundation
This commit is contained in:
1 parent
8907bb49fe
commit
50b1649965
74 files changed
+5949
-239
No files matched your search
@@ -0,0 +1,61 @@
|
||||
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) error {
|
||||
return a.update(map[string]any{"retention_days": days}, func(settings *audit.Settings) {
|
||||
settings.RetentionDays = days
|
||||
})
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
Reference in new issue
Block a user