Files
mal/internal/episodes/worker.go

45 lines
863 B
Go

package episodes
import (
"context"
"log"
"mal/internal/domain"
"time"
"go.uber.org/fx"
)
const workerInterval = time.Minute
func RegisterWorker(lc fx.Lifecycle, svc domain.EpisodeService) {
ctx, cancel := context.WithCancel(context.Background())
lc.Append(fx.Hook{
OnStart: func(context.Context) error {
go func() {
log.Println("episodes: availability worker started")
ticker := time.NewTicker(workerInterval)
defer ticker.Stop()
for {
if err := svc.RefreshTrackedDue(ctx, 25); err != nil {
log.Printf("episodes: availability worker tick failed error=%v", err)
}
select {
case <-ticker.C:
case <-ctx.Done():
log.Println("episodes: availability worker stopped")
return
}
}
}()
return nil
},
OnStop: func(context.Context) error {
cancel()
return nil
},
})
}