namespace LehrerApp.Sync.Models;
///
/// Anfrage zum Upload eines initialen Snapshots.
/// Enthält sowohl den verschlüsselten DB-Snapshot
/// als auch den mit dem Code verschlüsselten Sync-Schlüssel.
///
public class SnapshotUploadRequest
{
///
/// AES-256-GCM verschlüsselter Dump der lokalen LiteDB.
/// Verschlüsselt mit dem Sync-Schlüssel des Nutzers.
/// Der Server versteht den Inhalt nicht.
///
public string EncryptedPayload { get; init; } = "";
///
/// Der Sync-Schlüssel, verschlüsselt mit dem aus dem
/// Einmal-Code abgeleiteten Key (PBKDF2).
/// Ermöglicht dem Empfänger den Schlüssel ohne Vorabübertragung
/// zu rekonstruieren – nur der Code wird benötigt.
///
public string EncryptedSyncKey { get; init; } = "";
public DeviceType DeviceType { get; init; }
}
///
/// Antwort nach erfolgreichem Snapshot-Upload.
///
public class SnapshotUploadResponse
{
///
/// Menschenlesbarer Einmal-Code.
/// Format: WORT-ZZ-WORT, z.B. "TIGER-42-BLAU"
/// Dient gleichzeitig zum Abrufen UND zum Entschlüsseln des Sync-Schlüssels.
///
public string Code { get; init; } = "";
public DateTime ExpiresAt { get; init; }
}
///
/// Antwort beim Abrufen eines Snapshots per Code.
/// Nach dem ersten Abruf wird der Snapshot vom Server gelöscht.
///
public class SnapshotDownloadResponse
{
/// Der verschlüsselte DB-Snapshot.
public string EncryptedPayload { get; init; } = "";
///
/// Der mit dem Code verschlüsselte Sync-Schlüssel.
/// Empfänger: Code → PBKDF2 → Code-Key → EncryptedSyncKey entschlüsseln
/// → Sync-Key → EncryptedPayload entschlüsseln.
///
public string EncryptedSyncKey { get; init; } = "";
public DateTime CreatedAt { get; init; }
public DeviceType SourceDeviceType { get; init; }
}