36 lines
820 B
Go
36 lines
820 B
Go
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
|
|
}
|