Files
go-sip/internal/store/cleanup_scan.go
T

28 lines
1.2 KiB
Go

package store
// ListCleanupCandidates snapshots one bounded, stable-key page. Pending and
// unknown executions are not candidates; missing confirmations stay protected
// by the same transactional qualification used for real-time cleanup.
func (s *Store) ListCleanupCandidates(dispatcherID, afterType, afterID string) ([]OutboxEvent, error) {
rows, err := s.db.Query(`SELECT event_type,event_id FROM (
SELECT 'call.execute' AS event_type,event_id FROM dispatcher_inbox
WHERE dispatcher_id=? AND status IN ('finished','rejected','suppressed')
UNION
SELECT event_type,event_id FROM dispatcher_outbox WHERE dispatcher_id=? AND confirmed=1
AND event_type IN ('call.execute','call.execute.result','task.control','sip.config')
) WHERE event_type>? OR (event_type=? AND event_id>?) ORDER BY event_type,event_id LIMIT ?`, dispatcherID, dispatcherID, afterType, afterType, afterID, cleanupBatchSize)
if err != nil {
return nil, err
}
defer rows.Close()
var candidates []OutboxEvent
for rows.Next() {
event := OutboxEvent{}
if err := rows.Scan(&event.EventType, &event.EventID); err != nil {
return nil, err
}
candidates = append(candidates, event)
}
return candidates, rows.Err()
}