package useCases import ( "RenewCMS/internal/domain/purge" "time" ) type PurgeRunner interface { Run(fingerprint *string) (purge.RunResult, error) } type PurgeSchedulerUseCase struct { repository purge.Repository runner PurgeRunner } func NewPurgeSchedulerUseCase(repository purge.Repository, runner PurgeRunner) *PurgeSchedulerUseCase { return &PurgeSchedulerUseCase{repository, runner} } func (u *PurgeSchedulerUseCase) Tick(now time.Time) (purge.RunResult, bool, error) { settings, err := u.repository.Get() if err != nil { return purge.RunResult{}, false, err } next := settings.NextPurgeAt() if next == nil || now.Before(*next) { return purge.RunResult{}, false, nil } result, err := u.runner.Run(nil) if err != nil { return purge.RunResult{}, false, err } return result, true, nil }