feat: Integrate data retention service
- 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.
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
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()
|
||||
}
|
||||
Reference in New Issue
Block a user