package useCases import ( "RenewCMS/internal/domain/audit" "context" "time" ) type GetActivityRetentionUseCase struct { settings audit.SettingsRepository now func() time.Time } func NewGetActivityRetentionUseCase(settings audit.SettingsRepository, now func() time.Time) *GetActivityRetentionUseCase { return &GetActivityRetentionUseCase{settings, now} } func (g *GetActivityRetentionUseCase) GetActivityRetention() (audit.Settings, error) { current, err := g.settings.Get() if err != nil { return audit.Settings{}, err } return current.WithNextCleanup(g.now()), nil } type UpdateActivityRetentionUseCase struct { settings audit.SettingsRepository recorder audit.Recorder now func() time.Time } func NewUpdateActivityRetentionUseCase(settings audit.SettingsRepository, recorder audit.Recorder, now func() time.Time) *UpdateActivityRetentionUseCase { return &UpdateActivityRetentionUseCase{settings, recorder, now} } func (u *UpdateActivityRetentionUseCase) UpdateActivityRetention(ctx context.Context, days int) (audit.Settings, error) { if err := audit.ValidateRetentionDays(days); err != nil { return audit.Settings{}, err } current, err := u.settings.Get() if err != nil { return audit.Settings{}, err } if current.RetentionDays == days { return current.WithNextCleanup(u.now()), nil } if err := u.settings.SaveRetention(days); err != nil { return audit.Settings{}, err } event := audit.NewEvent(audit.ActionRetentionChanged, audit.CategorySystem) event.Params = map[string]any{audit.ParamFrom: current.RetentionDays, audit.ParamTo: days} u.recorder.Record(ctx, event) current.RetentionDays = days return current.WithNextCleanup(u.now()), nil }