Files
smart-search-back/internal/worker/session_cleaner.go
vallyenfail e2968722ed
Some checks failed
Deploy Smart Search Backend / deploy (push) Failing after 1m54s
add service
2026-01-17 20:41:37 +03:00

70 lines
1.3 KiB
Go

package worker
import (
"context"
"log"
"time"
"git.techease.ru/Smart-search/smart-search-back/internal/repository"
)
type SessionCleaner struct {
sessionRepo repository.SessionRepository
ctx context.Context
ticker *time.Ticker
done chan bool
}
func NewSessionCleaner(ctx context.Context, sessionRepo repository.SessionRepository) *SessionCleaner {
return &SessionCleaner{
sessionRepo: sessionRepo,
ctx: ctx,
done: make(chan bool),
}
}
func (w *SessionCleaner) Start() {
w.ticker = time.NewTicker(1 * time.Hour)
w.cleanExpiredSessions()
go func() {
for {
select {
case <-w.ticker.C:
w.cleanExpiredSessions()
case <-w.done:
return
case <-w.ctx.Done():
log.Println("Session cleaner context cancelled, stopping worker")
return
}
}
}()
log.Println("Session cleaner worker started (runs every hour)")
}
func (w *SessionCleaner) Stop() {
if w.ticker != nil {
w.ticker.Stop()
}
select {
case w.done <- true:
default:
}
log.Println("Session cleaner worker stopped")
}
func (w *SessionCleaner) cleanExpiredSessions() {
count, err := w.sessionRepo.DeleteExpired(w.ctx)
if err != nil {
log.Printf("Error cleaning expired sessions: %v", err)
return
}
if count > 0 {
log.Printf("Cleaned %d expired sessions", count)
}
}