Some checks failed
Build and Deploy Website / build (push) Failing after 2m46s
43 lines
802 B
Go
43 lines
802 B
Go
package paste
|
|
|
|
import (
|
|
"context"
|
|
"log/slog"
|
|
"time"
|
|
)
|
|
|
|
func StartExpiryWorker(ctx context.Context, s *Store, interval time.Duration) {
|
|
ticker := time.NewTicker(interval)
|
|
defer ticker.Stop()
|
|
for {
|
|
select {
|
|
case <-ctx.Done():
|
|
return
|
|
case <-ticker.C:
|
|
deleteExpired(s)
|
|
}
|
|
}
|
|
}
|
|
|
|
func deleteExpired(s *Store) {
|
|
var expired []string
|
|
err := s.ForEach(func(p *Paste) error {
|
|
if p.ExpiresAt != nil && time.Now().After(*p.ExpiresAt) {
|
|
expired = append(expired, p.ID)
|
|
}
|
|
return nil
|
|
})
|
|
if err != nil {
|
|
slog.Error("expiry scan error", "err", err)
|
|
return
|
|
}
|
|
for _, id := range expired {
|
|
if err := s.Delete(id); err != nil {
|
|
slog.Error("expiry delete error", "id", id, "err", err)
|
|
}
|
|
}
|
|
if len(expired) > 0 {
|
|
slog.Info("deleted expired pastes", "count", len(expired))
|
|
}
|
|
}
|