58 lines
1.7 KiB
Go
58 lines
1.7 KiB
Go
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
|
|
}
|