feat(schnellstart): Kacheln je Geraetetyp in der Oberflaeche pflegen
Welche Vorlagen auf der Geraeteseite als Kachel erscheinen, stand nur im Seed. Wer eine eigene Vorlage dort haben wollte, kam nicht heran; wer eine mitgelieferte loswerden wollte, auch nicht. Neue Seite Verwaltung -> Schnellstart: je Geraetetyp eine Liste, Reihenfolge ueber Hoch und Runter. Kein Drag & Drop -- der Editor braucht dnd-kit fuer hundert Schritte, hier sind es zwei bis vier Kacheln, und zwei Knoepfe sind am Handy verlaesslicher als eine Ziehgeste neben einer scrollenden Seite. Gespeichert wird die ganze Liste; position kommt aus ihrer Reihenfolge, damit es nur eine Wahrheit darueber gibt. Zur Auswahl stehen nur veroeffentlichte, nicht archivierte Vorlagen. Einstellung.schnellstartGepflegt haelt den Seed heraus, sobald jemand gespeichert hat -- auch bei unveraenderter Liste. Eine fehlende Zeile sagt nicht, ob sie noch nie da war oder bewusst entfernt wurde. Das Durchklicken des gebauten Stands fand einen Fehler, den die Suite nicht gesehen haette: die Umsortierung wurde nicht gespeichert. Altdaten tragen mehrere Zeilen auf position 0, und bei gleicher Position ist die Reihenfolge in Postgres nicht festgelegt -- Lesemodell und Dienst gaben sie unterschiedlich zurueck, und der Vergleich hielt die Umsortierung fuer einen Leerlauf. Behoben durch einen eindeutigen Tiebreak in beiden Abfragen, mit Regressionstest. Closes #34
This commit is contained in:
@@ -0,0 +1,21 @@
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- HANDGESCHRIEBEN. Prisma erzeugt hier zusaetzlich Loeschbefehle fuer die
|
||||
-- zusammengesetzten Fremdschluessel (Mandantengrenze), die Trigramm-Indizes
|
||||
-- (Archivsuche), die partiellen eindeutigen Indizes und die Trigger auf
|
||||
-- veroeffentlichten Versionen: es kennt sie nicht, weil sie sich im Schema nicht
|
||||
-- ausdruecken lassen. Diese Loeschbefehle sind bewusst gestrichen.
|
||||
--
|
||||
-- tests/datenbankregeln.test.ts prueft, dass alle diese Objekte vorhanden sind –
|
||||
-- ein versehentlich stehengelassener Loeschbefehl faellt dort sofort auf.
|
||||
-- ---------------------------------------------------------------------------
|
||||
|
||||
-- Marke fuer den Schnellstart (#022).
|
||||
--
|
||||
-- Der Seed legt Vorgaben je Geraetetyp an. Ohne diese Marke kaeme eine in der
|
||||
-- Oberflaeche entfernte Zuordnung beim naechsten Lauf zurueck: eine fehlende
|
||||
-- Zeile sagt nicht, ob sie noch nie da war oder bewusst entfernt wurde.
|
||||
--
|
||||
-- Bestehende Installationen bekommen `false`. Das ist richtig: dort hat noch
|
||||
-- niemand den Schnellstart in der Oberflaeche gepflegt, weil es sie nicht gab.
|
||||
ALTER TABLE "Einstellung"
|
||||
ADD COLUMN "schnellstartGepflegt" BOOLEAN NOT NULL DEFAULT false;
|
||||
+11
-6
@@ -98,15 +98,20 @@ enum Herkunft {
|
||||
/// der Datenbank und nicht in der Umgebung, damit der Admin ohne Neustart
|
||||
/// umschalten kann.
|
||||
model Einstellung {
|
||||
id String @id @default("global")
|
||||
modus Betriebsmodus @default(INTERN)
|
||||
id String @id @default("global")
|
||||
modus Betriebsmodus @default(INTERN)
|
||||
/// Globale Namensregeln fuer upn, sam, mail und hostname. Im Modus
|
||||
/// DIENSTLEISTUNG koennen Kunden eigene Regeln haben, die diese ueberlagern.
|
||||
namensregeln Json @default("{}")
|
||||
namensregeln Json @default("{}")
|
||||
/// Ziel-OU fuer deaktivierte Konten, Vorbelegung im Offboarding.
|
||||
gesperrteOu String?
|
||||
erstelltAm DateTime @default(now())
|
||||
geaendertAm DateTime @default(now()) @updatedAt
|
||||
gesperrteOu String?
|
||||
/// Sobald jemand den Schnellstart in der Oberflaeche gespeichert hat, laesst
|
||||
/// der Seed `GeraetetypVorlage` in Ruhe (#022). Ohne diese Marke kaeme eine
|
||||
/// entfernte Zuordnung beim naechsten Seed-Lauf zurueck: eine fehlende Zeile
|
||||
/// sagt nicht, ob sie noch nie da war oder bewusst entfernt wurde.
|
||||
schnellstartGepflegt Boolean @default(false)
|
||||
erstelltAm DateTime @default(now())
|
||||
geaendertAm DateTime @default(now()) @updatedAt
|
||||
}
|
||||
|
||||
model Kunde {
|
||||
|
||||
@@ -273,6 +273,21 @@ export async function typVorgabenSaeen(
|
||||
db: PrismaClient,
|
||||
vorlagen: readonly GesaeteVorlage[],
|
||||
): Promise<number> {
|
||||
/*
|
||||
* Hat jemand den Schnellstart in der Oberflaeche gespeichert, haelt der Seed
|
||||
* sich heraus — auch bei einer Vorgabe, die dort fehlt (#022). Eine fehlende
|
||||
* Zeile sagt nicht, ob sie noch nie da war oder bewusst entfernt wurde; ohne
|
||||
* diese Marke kaeme eine entfernte Kachel beim naechsten Lauf zurueck.
|
||||
*/
|
||||
const einstellung = await db.einstellung.findUnique({
|
||||
where: { id: "global" },
|
||||
select: { schnellstartGepflegt: true },
|
||||
});
|
||||
if (einstellung?.schnellstartGepflegt) {
|
||||
console.log(" Schnellstart je Geraetetyp: in der Oberflaeche gepflegt, bleibt unberührt");
|
||||
return 0;
|
||||
}
|
||||
|
||||
const nachName = new Map(vorlagen.map((eintrag) => [eintrag.name, eintrag.vorlageId]));
|
||||
let angelegt = 0;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user