using LehrerApp.Sync.Models; namespace LehrerApp.Api; public class PlainEventStore(EventStore eventStore) { private static readonly HashSet Allowed = ["Grade", "ExamResult", "WorkTask", "Lesson"]; public PlainPushResponse Push(string userId, List events) { var permitted = events.Where(e => Allowed.Contains(e.EntityType)).ToList(); var rejected = events.Where(e => !Allowed.Contains(e.EntityType)) .Select(e => e.EventId).ToList(); if (permitted.Count == 0) return new() { Success = true, RejectedEventIds = rejected }; var syncEvents = permitted.Select(e => new SyncEvent { EventId = e.EventId, DeviceId = e.DeviceId, DeviceType = DeviceType.Companion, Timestamp = e.Timestamp, SequenceNr = 0, EntityType = e.EntityType, EntityId = e.EntityId, Operation = e.Operation, Payload = e.Payload, }).ToList(); var result = eventStore.Push(userId, syncEvents); return new() { Success = result.Success, ServerSequenceNr = result.ServerSequenceNr, RejectedEventIds = [.. result.ConflictingEventIds, .. rejected], }; } }