0a635ab3aa
- Implemented the data retention service in Go (service-operation) that manages cleanup of old records based on configured retention periods. The service runs once per day to ensure outdated data is removed automatically.
63 lines
1.4 KiB
Go
63 lines
1.4 KiB
Go
package dataretention
|
|
|
|
import (
|
|
"service-operation/pocketbase"
|
|
"time"
|
|
)
|
|
|
|
// Scheduler handles periodic data retention cleanup
|
|
type Scheduler struct {
|
|
service *Service
|
|
interval time.Duration
|
|
stopChan chan bool
|
|
}
|
|
|
|
// NewScheduler creates a new cleanup scheduler
|
|
func NewScheduler(pbClient *pocketbase.PocketBaseClient, interval time.Duration) *Scheduler {
|
|
return &Scheduler{
|
|
service: NewService(pbClient),
|
|
interval: interval,
|
|
stopChan: make(chan bool),
|
|
}
|
|
}
|
|
|
|
// Start begins the periodic cleanup process
|
|
func (s *Scheduler) Start() {
|
|
// log.Printf("Starting data retention scheduler with interval: %v", s.interval)
|
|
|
|
ticker := time.NewTicker(s.interval)
|
|
defer ticker.Stop()
|
|
|
|
// Run initial cleanup
|
|
go func() {
|
|
if err := s.service.ScheduleCleanup(); err != nil {
|
|
// log.Printf("Initial cleanup failed: %v", err)
|
|
}
|
|
}()
|
|
|
|
for {
|
|
select {
|
|
case <-ticker.C:
|
|
go func() {
|
|
if err := s.service.ScheduleCleanup(); err != nil {
|
|
// log.Printf("Scheduled cleanup failed: %v", err)
|
|
}
|
|
}()
|
|
case <-s.stopChan:
|
|
// log.Println("Data retention scheduler stopped")
|
|
return
|
|
}
|
|
}
|
|
}
|
|
|
|
// Stop stops the scheduler
|
|
func (s *Scheduler) Stop() {
|
|
// log.Println("Stopping data retention scheduler...")
|
|
s.stopChan <- true
|
|
}
|
|
|
|
// RunOnce executes cleanup immediately (for manual triggers)
|
|
func (s *Scheduler) RunOnce() (*CleanupSummary, error) {
|
|
// log.Println("Running manual data retention cleanup...")
|
|
return s.service.CleanupOldRecords()
|
|
} |