using LehrerApp.Sync.Models; namespace LehrerApp.Sync; /// /// Desktop gewinnt gegen Companion. /// Bei Gleichstand: späterer Timestamp gewinnt. /// public class ConflictResolver(EventQueue queue) { public ConflictEntry? TryResolve(SyncEvent remote, string localDeviceId) { var local = queue.GetPending() .FirstOrDefault(e => e.EntityType == remote.EntityType && e.EntityId == remote.EntityId && e.DeviceId != remote.DeviceId); if (local is null) return null; var winner = (local.DeviceType, remote.DeviceType) switch { (DeviceType.Desktop, DeviceType.Companion) => local, (DeviceType.Companion, DeviceType.Desktop) => remote, _ => local.Timestamp >= remote.Timestamp ? local : remote, }; if (winner == remote) queue.Acknowledge([local.EventId]); return new ConflictEntry { LocalEvent = local, RemoteEvent = remote, Resolution = winner == local ? "LocalWon" : "RemoteWon", }; } }