Purge orphan sync queue entries before push
This commit is contained in:
@@ -474,6 +474,16 @@ func (l *LocalDB) MarkChangesSynced(ids []int64) error {
|
|||||||
return l.db.Where("id IN ?", ids).Delete(&PendingChange{}).Error
|
return l.db.Where("id IN ?", ids).Delete(&PendingChange{}).Error
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PurgeOrphanConfigurationPendingChanges removes configuration pending changes
|
||||||
|
// whose entity_uuid no longer exists in local_configurations.
|
||||||
|
func (l *LocalDB) PurgeOrphanConfigurationPendingChanges() (int64, error) {
|
||||||
|
tx := l.db.Where(
|
||||||
|
"entity_type = ? AND entity_uuid NOT IN (SELECT uuid FROM local_configurations)",
|
||||||
|
"configuration",
|
||||||
|
).Delete(&PendingChange{})
|
||||||
|
return tx.RowsAffected, tx.Error
|
||||||
|
}
|
||||||
|
|
||||||
// GetPendingCount returns the total number of pending changes (alias for CountPendingChanges)
|
// GetPendingCount returns the total number of pending changes (alias for CountPendingChanges)
|
||||||
func (l *LocalDB) GetPendingCount() int64 {
|
func (l *LocalDB) GetPendingCount() int64 {
|
||||||
return l.CountPendingChanges()
|
return l.CountPendingChanges()
|
||||||
|
|||||||
@@ -398,6 +398,13 @@ func (s *Service) SyncPricelistsIfNeeded() error {
|
|||||||
|
|
||||||
// PushPendingChanges pushes all pending changes to the server
|
// PushPendingChanges pushes all pending changes to the server
|
||||||
func (s *Service) PushPendingChanges() (int, error) {
|
func (s *Service) PushPendingChanges() (int, error) {
|
||||||
|
removed, err := s.localDB.PurgeOrphanConfigurationPendingChanges()
|
||||||
|
if err != nil {
|
||||||
|
slog.Warn("failed to purge orphan configuration pending changes", "error", err)
|
||||||
|
} else if removed > 0 {
|
||||||
|
slog.Info("purged orphan configuration pending changes", "removed", removed)
|
||||||
|
}
|
||||||
|
|
||||||
changes, err := s.localDB.GetPendingChanges()
|
changes, err := s.localDB.GetPendingChanges()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, fmt.Errorf("getting pending changes: %w", err)
|
return 0, fmt.Errorf("getting pending changes: %w", err)
|
||||||
|
|||||||
Reference in New Issue
Block a user