upload-service/internal/cleanup/cleanup.go

52 lines
963 B
Go

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)
}
}
}