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) }