package cleanup import ( "context" "log" "time" "scratchbox/internal/storage" ) type Worker struct { store *storage.FilesystemStore interval time.Duration logger *log.Logger } func NewWorker(store *storage.FilesystemStore, interval time.Duration, logger *log.Logger) *Worker { return &Worker{ store: store, interval: interval, logger: logger, } } func (w *Worker) Start(ctx context.Context) { ticker := time.NewTicker(w.interval) defer ticker.Stop() for { select { case <-ctx.Done(): return case now := <-ticker.C: deleted, err := w.store.DeleteExpired(now) if err != nil { w.logger.Printf("cleanup worker failed: %v", err) continue } if deleted > 0 { w.logger.Printf("cleanup worker removed %d expired scratches", deleted) } } } }