add paste functionality
Some checks failed
Build and Deploy Website / build (push) Failing after 2m46s
Some checks failed
Build and Deploy Website / build (push) Failing after 2m46s
This commit is contained in:
42
Backend/paste/expiry.go
Normal file
42
Backend/paste/expiry.go
Normal file
@@ -0,0 +1,42 @@
|
||||
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))
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user