round59: Serverseitige, geraeteuebergreifende Bestaetigung von Scan-Vorschlaegen statt nur lokalem sessionStorage

This commit is contained in:
2026-07-26 14:00:10 +02:00
parent 403a052a0f
commit a7036849b1
5 changed files with 282 additions and 35 deletions

View File

@@ -128,6 +128,13 @@ export function ensureSchema(): void {
status INTEGER NOT NULL,
detected_at TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS scan_dismissals (
id TEXT PRIMARY KEY,
kind TEXT NOT NULL,
dedupe_key TEXT NOT NULL,
dismissed_at TEXT NOT NULL
);
`);
// Leichte Migration für Datenbanken, die vor Einführung von "visible"/
@@ -159,6 +166,15 @@ export function ensureSchema(): void {
sqlite.exec(
`CREATE UNIQUE INDEX IF NOT EXISTS idx_services_device_port ON services(device_id, port)`
);
// Verhindert doppelte Einträge für denselben Vorschlag (z. B. wenn zwei
// Browser fast gleichzeitig denselben neuen Dienst bestätigen) - der
// Dismiss-Endpunkt selbst nutzt ohnehin "INSERT OR IGNORE" (siehe
// db/repositories/scanDismissals.ts), dieser Index macht das zusätzlich
// auf Datenbankebene verbindlich.
sqlite.exec(
`CREATE UNIQUE INDEX IF NOT EXISTS idx_scan_dismissals_kind_key ON scan_dismissals(kind, dedupe_key)`
);
}
/**