package cleanup import ( "context" "log" "time" "github.com/jeffemmett/upload-service/internal/r2" "github.com/jeffemmett/upload-service/internal/store" ) func Start(ctx context.Context, s *store.Store, r *r2.Client) { ticker := time.NewTicker(1 * time.Hour) defer ticker.Stop() // Run once on startup run(ctx, s, r) for { select { case <-ctx.Done(): return case <-ticker.C: run(ctx, s, r) } } } func run(ctx context.Context, s *store.Store, r *r2.Client) { files, err := s.ListExpired() if err != nil { log.Printf("cleanup: list expired error: %v", err) return } if len(files) == 0 { return } log.Printf("cleanup: removing %d expired files", len(files)) for _, f := range files { if err := r.Delete(ctx, f.R2Key); err != nil { log.Printf("cleanup: r2 delete %s error: %v", f.ID, err) continue } if err := s.Delete(f.ID); err != nil { log.Printf("cleanup: db delete %s error: %v", f.ID, err) } } }