52 lines
963 B
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)
|
|
}
|
|
}
|
|
}
|