48 lines
1.4 KiB
Go
48 lines
1.4 KiB
Go
package useCases
|
|
|
|
import (
|
|
"RenewCMS/internal/domain/audit"
|
|
"context"
|
|
"time"
|
|
)
|
|
|
|
type CleanupActivityUseCase struct {
|
|
events audit.Repository
|
|
settings audit.SettingsRepository
|
|
recorder audit.Recorder
|
|
}
|
|
|
|
func NewCleanupActivityUseCase(events audit.Repository, settings audit.SettingsRepository, recorder audit.Recorder) *CleanupActivityUseCase {
|
|
return &CleanupActivityUseCase{events, settings, recorder}
|
|
}
|
|
|
|
func (c *CleanupActivityUseCase) Tick(now time.Time) (audit.CleanupResult, bool, error) {
|
|
settings, err := c.settings.Get()
|
|
if err != nil {
|
|
return audit.CleanupResult{}, false, err
|
|
}
|
|
if settings.RetentionDays == audit.ForeverRetentionDays || !settings.CleanupDue(now) {
|
|
return audit.CleanupResult{}, false, nil
|
|
}
|
|
|
|
removed, err := c.events.DeleteOlderThan(audit.RetentionCutoff(now, settings.RetentionDays))
|
|
if err != nil {
|
|
return audit.CleanupResult{}, false, err
|
|
}
|
|
if err := c.settings.SaveLastCleanup(now, removed); err != nil {
|
|
return audit.CleanupResult{}, false, err
|
|
}
|
|
if removed > 0 {
|
|
c.recordCleanup(removed)
|
|
}
|
|
return audit.CleanupResult{Removed: removed}, true, nil
|
|
}
|
|
|
|
func (c *CleanupActivityUseCase) recordCleanup(removed int) {
|
|
event := audit.NewEvent(audit.ActionCleanup, audit.CategorySystem)
|
|
event.Actor = audit.SystemActor()
|
|
event.Source = audit.SourceSystem
|
|
event.Params = map[string]any{audit.ParamRemoved: removed}
|
|
c.recorder.Record(context.Background(), event)
|
|
}
|