using LehrerApp.Sync.Models; namespace LehrerApp.Api; public class PlainEventStore(EventStore eventStore) { // Grade/ExamResult bewusst NICHT erlaubt: PlainSyncEvent.Payload ist Klartext-JSON (siehe // SyncModels.cs), beide Typen tragen aber eine StudentId plus Notenwert/-kommentar - // personenbezogene Daten dürfen laut TODO.md 10.3.3 nicht unverschlüsselt übertragen werden. private static readonly HashSet Allowed = ["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], }; } }