- PlainEventStore.Allowed: Grade/ExamResult entfernt (beide tragen StudentId + Notenwert/-kommentar, PlainSyncEvent.Payload läuft aber als Klartext-JSON über den Server, anders als der AES-256-GCM- verschlüsselte Desktop-Kanal). Nur noch WorkTask/Lesson erlaubt. - Regressionstest PlainEventStoreTests ergänzt. - TODO.md 10.3.3 abgehakt, inkl. deutlichem Warnhinweis: die geplante Mitarbeitsnoten-Erfassung per Companion-App ist damit bewusst blockiert, bis 10.3.1 (Schlüsselaustausch) + eine echte Payload- Verschlüsselung für PlainSyncEvent existieren. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
37 lines
1.5 KiB
C#
37 lines
1.5 KiB
C#
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<string> Allowed = ["WorkTask", "Lesson"];
|
|
|
|
public PlainPushResponse Push(string userId, List<PlainSyncEvent> 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],
|
|
};
|
|
}
|
|
}
|