50 lines
1.2 KiB
Go
50 lines
1.2 KiB
Go
package useCases
|
|
|
|
import (
|
|
"RenewCMS/internal/domain/purge"
|
|
"time"
|
|
)
|
|
|
|
type UpdatePurgeSettingsCommand struct {
|
|
AutoPurgeEnabled *bool
|
|
AutoPurgeIntervalDays *int
|
|
}
|
|
|
|
type UpdatePurgeSettingsUseCase struct {
|
|
repository purge.Repository
|
|
now func() time.Time
|
|
}
|
|
|
|
func NewUpdatePurgeSettingsUseCase(repository purge.Repository, now func() time.Time) *UpdatePurgeSettingsUseCase {
|
|
return &UpdatePurgeSettingsUseCase{repository, now}
|
|
}
|
|
|
|
func (u *UpdatePurgeSettingsUseCase) Update(command UpdatePurgeSettingsCommand) (purge.Settings, error) {
|
|
if command.AutoPurgeIntervalDays != nil {
|
|
if err := purge.ValidateIntervalDays(*command.AutoPurgeIntervalDays); err != nil {
|
|
return purge.Settings{}, err
|
|
}
|
|
}
|
|
|
|
settings, err := u.repository.Get()
|
|
if err != nil {
|
|
return purge.Settings{}, err
|
|
}
|
|
|
|
if command.AutoPurgeEnabled != nil {
|
|
if *command.AutoPurgeEnabled && !settings.AutoPurgeEnabled {
|
|
enabledAt := u.now().UTC()
|
|
settings.EnabledAt = &enabledAt
|
|
}
|
|
settings.AutoPurgeEnabled = *command.AutoPurgeEnabled
|
|
}
|
|
if command.AutoPurgeIntervalDays != nil {
|
|
settings.AutoPurgeIntervalDays = *command.AutoPurgeIntervalDays
|
|
}
|
|
|
|
if err := u.repository.Save(settings); err != nil {
|
|
return purge.Settings{}, err
|
|
}
|
|
return settings, nil
|
|
}
|