Anleitung, Etappe 1: die Einweisung fuer Creator steht
Erste von sieben Etappen aus dem geprueften Bauplan
(`02 Projekte/Anleitung-Kachel – Bauplan.md`). Ein Creator oeffnet die
neue Kachel und sieht seine vollstaendige Einweisung: drei Saetze „In
60 Sekunden", fuenf Erste Schritte, achtzehn Karten in drei Stufen,
„Das kannst du liegen lassen", sein Rhythmus und vier Fragen.
WAS NICHT IN DER DATENBANK STEHT -- und das ist der Kern.
Eine Karte zeigt Name, Symbol, Farbe und Adresse ihrer echten Kachel.
Nichts davon ist gespeichert. Es steht in bereiche.js, genau einmal,
und wird ueber einen abgeleiteten Schluessel verbunden
(`bereich.html?b=live` -> `bereich:live`). Haette ich den Namen
danebengeschrieben, erklaerte die Anleitung nach der ersten Umbenennung
eine Kachel, die es so nicht mehr gibt -- und niemandem fiele es auf.
Gespeichert ist nur, was der Bauplan NEU bringt: die Stufe und die drei
Saetze Wozu / Was du hier tust / Merke.
Der Schluessel muss abgeleitet sein, weil zwei Faelle sonst
zusammenfallen: `bereich.html` ist FUENF Kacheln, und `profil.html`
heisst beim Creator „Mein Profil" und beim Manager „Creator-Profile".
DIE WICHTIGSTE PRUEFUNG STEHT NICHT IM BAUPLAN.
pruef-anleitung.mjs fragt in BEIDE Richtungen: Hat jede Kachel, die
diese Rolle sieht, genau eine Karte -- und zeigt jede Karte auf eine
Kachel, die es wirklich gibt? Beides kann lautlos kaputtgehen, und der
Bauplan sah dafuer nur einen Hinweis in der Pflege-Ansicht vor. Der
hilft nur, wenn jemand hinsieht.
Dafuer wird bereiche.js in der Pruefung AUSGEFUEHRT (node:vm mit einem
winzigen Browser-Ersatz), nicht mit einem Muster durchsucht. Ein Muster
waere eine ungenaue Nachbildung und wuerde bei der ersten ungewohnten
Schreibweise „alles in Ordnung" melden.
DREI BEFUNDE BEIM BAUEN, ALLE GEMESSEN STATT GEAHNT:
1. Ton 48. Das Hauswerkzeug schlug #b0ec0a vor -- Abstand 0,0815 zur
Kachel „Agentur", die ein Creator direkt daneben sieht, und 13,28:1
Kontrast. Der Grund: Es rechnet gegen alle 47 Toene, aber die Haelfte
gehoert zum anderen Haus und erscheint nie auf demselben Bildschirm.
Gegen die 24 Toene DIESES Hauses gerechnet: #ff7eed, Abstand 0,1168
(43 % mehr) bei sanfteren 8,46:1. Die Herleitung steht in start.css,
samt Warnung, dass ein erneuter Werkzeuglauf es verschlechtern wuerde.
2. Die Erste-Schritte-Verweise waren 20 px hoch. Gemessen bei 412 px --
die halbe Hausgroesse fuer einen Daumen, auf der Seite, die fuer
Leute gebaut ist, die zum ersten Mal hier sind und auf dem Handy
sitzen. Jetzt ist die ganze Zeile das Ziel, 44 px.
3. Die Textbloecke standen ohne Flaeche auf der Seite. Auf dem ersten
Bild lief „Fast alles andere fuellt deine Betreuung fuer dich" quer
ueber das helle Wasserzeichen des Hintergrundbildes. Deshalb hat im
Haus jeder Textträger `--flaeche`: Ein Kontrast, der vom
Bildausschnitt abhaengt, ist keiner.
NEBENBEI ZWEI LUECKEN GESCHLOSSEN: `manager-ziele.html` und
`anleitung.html` fehlten in der Seitenliste von pruef-rollen. Ganz
ungeprueft waren sie nicht -- der Kachel-Durchgang oeffnet jede Kachel
--, aber er prueft nur, WO man landet. Konsolenfehler, 4xx-Antworten,
tote Verweise und Ueberstehen liefen fuer beide nie. Dieselbe Sorte
stiller Luecke wie am 28.08.2026 bei RunOne.
ENTSCHEIDUNGEN VON FILIPE (06.10.2026):
Pflege durch DogFather UND Spicy (nicht nur DogFather wie im Bauplan)
-- dieselbe Regel wie bei den Manager-Zielen am 02.10.
Vorerst nur das Agenturhaus, die Daten aber haus-bewusst angelegt.
DogFather bekommt keine Kachel (er braucht keine Einweisung), darf die
Seite aber oeffnen: Ueber den vorhandenen Sicht-Umschalter sieht er
jede Fassung. Eine zweite Rollenauswahl auf der Seite waere dieselbe
Funktion an einer Stelle, an der sie niemand sucht.
Gemessen
pruef-anleitung 47 Pruefungen, 0 Fehler (neu)
pruef-rollen 401 Pruefungen, 0 Fehler (vorher 384)
pruef-rechtetafel 19 Pruefungen, 0 Fehler
pruef-css-klassen alles in Ordnung, jetzt 40 Seiten, 42 Stellen
unter 11,5 px (unveraendert)
mess-anleitung kein Querschieben bei 412 und 1440 px, keine
Konsolenfehler, alle 18 Karten mit Kachelfarbe
Sicherung vor dem Ausliefern:
~/sicherungen/workspace-vor-anleitung-20261006-1325.db (integrity ok)
Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
@@ -0,0 +1,376 @@
|
||||
/* =====================================================================
|
||||
DIE ANLEITUNG — Tabellen und Inhalte
|
||||
|
||||
Bauplan: "Kachel Anleitung — Bauplan fuer die Einweisung neuer
|
||||
Leute", Stand 06.10.2026. Geprueft und ergaenzt in
|
||||
`02 Projekte/Anleitung-Kachel – Bauplan.md` (Obsidian).
|
||||
|
||||
---------------------------------------------------------------------
|
||||
WAS HIER *NICHT* STEHT, UND WARUM DAS DER KERN IST
|
||||
|
||||
Eine Karte der Anleitung zeigt Symbol, Farbe, Name und Ziel der
|
||||
echten Kachel. Nichts davon steht in dieser Datenbank.
|
||||
|
||||
Es steht in `workspace/assets/js/bereiche.js`, und zwar genau
|
||||
einmal. Wuerde man es hier noch einmal hinschreiben, haette man zwei
|
||||
Listen: Die eine wird gepflegt, wenn eine Kachel umbenannt wird, die
|
||||
andere nicht — und ab da erklaert die Anleitung eine Kachel, die es
|
||||
so nicht mehr gibt. Das ist derselbe Fehler, der am 11.09.2026 beim
|
||||
Spaltenumbau drei Spalten gekostet hat: eine abgeschriebene Liste.
|
||||
|
||||
Gespeichert wird deshalb nur, was der Bauplan NEU hinzufuegt:
|
||||
die Stufe und die drei Saetze (Wozu / Was du hier tust / Merke).
|
||||
Verbunden wird ueber den Kachel-Schluessel.
|
||||
|
||||
---------------------------------------------------------------------
|
||||
DER KACHEL-SCHLUESSEL wird aus dem Ziel ABGELEITET, nicht vergeben:
|
||||
|
||||
uebersicht.html -> uebersicht
|
||||
bereich.html?b=live -> bereich:live
|
||||
|
||||
Das muss sein, weil zwei Faelle sonst zusammenfallen:
|
||||
|
||||
* `bereich.html` ist FUENF Kacheln (live, community, technik,
|
||||
schutz, agentur). Ueber die Seite allein waeren sie eine.
|
||||
* `profil.html` heisst beim Creator "Mein Profil" und beim Manager
|
||||
"Creator-Profile" — zwei Karten, eine Adresse. Hier trennt sie
|
||||
die Rolle im Schluessel (haus, rolle, kachel).
|
||||
|
||||
---------------------------------------------------------------------
|
||||
DIE HAUS-SPALTE ist leer gelaufene Vorsorge und soll es bleiben.
|
||||
|
||||
Entscheidung Filipe, 06.10.2026: "Jetzt nur Agentur, aber
|
||||
vorbereitet." Team Dogi bekommt heute keine Anleitung. Die Spalte
|
||||
kostet jetzt ein Feld; sie spaeter nachzuruesten hiesse, jede Zeile
|
||||
und jeden Schluessel anzufassen.
|
||||
===================================================================== */
|
||||
|
||||
/** Die drei Stufen. Reihenfolge ist die Anzeigereihenfolge. */
|
||||
export const STUFEN = [
|
||||
{ schluessel: "muss", name: "Muss",
|
||||
titel: "Das brauchst du sofort",
|
||||
unter: "Ohne das laeuft der Alltag nicht.",
|
||||
offen: true },
|
||||
{ schluessel: "regelmaessig", name: "Regelmäßig",
|
||||
titel: "Das kommt regelmäßig",
|
||||
unter: "Woechentlich, monatlich oder bei jedem neuen Creator.",
|
||||
offen: false },
|
||||
{ schluessel: "bedarf", name: "Bei Bedarf",
|
||||
titel: "Das brauchst du nur bei Bedarf",
|
||||
unter: "Nur oeffnen, wenn es einen Anlass gibt.",
|
||||
offen: false },
|
||||
];
|
||||
|
||||
export const STUFEN_SCHLUESSEL = STUFEN.map((s) => s.schluessel);
|
||||
|
||||
/** Die Rollen, die eine eigene Fassung bekommen.
|
||||
*
|
||||
* OHNE 'admin'. DogFather bekommt keine Einweisung (Bauplan,
|
||||
* Kapitel 11) — bei ihm oeffnet dieselbe Adresse ab Etappe 4 die
|
||||
* Pflege-Ansicht. */
|
||||
export const FASSUNGEN = ["creator", "scout", "manager", "spicy"];
|
||||
|
||||
/** Wer die Texte aendern darf.
|
||||
*
|
||||
* DogFather UND Spicy — Entscheidung Filipe am 06.10.2026, und zwar
|
||||
* ausdruecklich dieselbe Regel wie bei den Manager-Zielen am
|
||||
* 02.10.2026 ("dogfather und spicy rolle sollen gleichzeitig es immer
|
||||
* aendern koennen fuer alle"). Der Bauplan hatte hier "nur DogFather"
|
||||
* stehen; zwei verschiedene Regeln fuer dieselbe Frage sind eine
|
||||
* Regel, die man sich nicht merken kann. */
|
||||
export const PFLEGE_ROLLEN = ["admin", "spicy"];
|
||||
|
||||
/** Die Arten von Listenzeilen in `anl_zeile`.
|
||||
*
|
||||
* EINE TABELLE STATT FUENF. Satz, Schritt, Nicht-deins, Takt und Frage
|
||||
* sind alle dasselbe: eine geordnete Zeile mit hoechstens zwei Texten
|
||||
* und manchmal einem Ziel. Fuenf Tabellen waeren fuenfmal dieselbe
|
||||
* Spaltenliste, fuenf Indizes und fuenf Stellen, an denen die
|
||||
* Haus-Spalte vergessen werden kann. */
|
||||
export const ZEILEN_ARTEN = {
|
||||
/* "In 60 Sekunden" — drei Saetze. Nur `text`. */
|
||||
satz: { titel: false, ziel: false },
|
||||
/* "Erste Schritte" — `titel` ist die Kachel, `ziel` der Sprung. */
|
||||
schritt: { titel: true, ziel: true },
|
||||
/* "Das kannst du liegen lassen" — `titel` die Taetigkeit,
|
||||
`text` wer sie erledigt. */
|
||||
nicht: { titel: true, ziel: false },
|
||||
/* "Dein Rhythmus" — `titel` ist das Wann, `text` das Was. */
|
||||
takt: { titel: true, ziel: false },
|
||||
/* "Haeufige Fragen" — `titel` die Frage, `text` die Antwort. */
|
||||
frage: { titel: true, ziel: false },
|
||||
};
|
||||
|
||||
export const ARTEN_SCHLUESSEL = Object.keys(ZEILEN_ARTEN);
|
||||
|
||||
/* =====================================================================
|
||||
WO DIE UMRECHNUNG "Ziel -> Schluessel" STEHT
|
||||
|
||||
NICHT hier. Der Server bildet nie einen Schluessel: Die Schluessel
|
||||
stehen woertlich in INHALTE weiter unten, er schreibt sie nur weg.
|
||||
Gebraucht wird die Rechnung ausschliesslich im Browser, wo die
|
||||
Kachelliste liegt — also steht sie dort, als
|
||||
`window.Bereiche.schluesselVonZiel`.
|
||||
|
||||
Ich hatte sie zuerst hier gebaut und exportiert. Benutzt haette sie
|
||||
niemand. Eine Funktion, die nur dasteht, liest sich beim naechsten
|
||||
Mal wie eine Zusage ("der Server kennt die Kacheln") und ist keine.
|
||||
Wenn die Pflege-Ansicht in Etappe 4 Schreibzugriffe pruefen muss,
|
||||
kommt sie zurueck — dann aber mit einem Aufrufer.
|
||||
===================================================================== */
|
||||
|
||||
const TABELLEN = `
|
||||
CREATE TABLE IF NOT EXISTS anl_karte (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
haus TEXT NOT NULL DEFAULT 'agentur',
|
||||
rolle TEXT NOT NULL,
|
||||
kachel TEXT NOT NULL,
|
||||
stufe TEXT NOT NULL,
|
||||
wozu TEXT NOT NULL DEFAULT '',
|
||||
tust TEXT NOT NULL DEFAULT '',
|
||||
merke TEXT NOT NULL DEFAULT '',
|
||||
reihe INTEGER NOT NULL DEFAULT 0,
|
||||
geaendert TEXT NOT NULL,
|
||||
geaendert_von INTEGER REFERENCES personen(id) ON DELETE SET NULL,
|
||||
UNIQUE (haus, rolle, kachel)
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS idx_anl_karte_sicht ON anl_karte (haus, rolle, stufe, reihe);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS anl_zeile (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
haus TEXT NOT NULL DEFAULT 'agentur',
|
||||
rolle TEXT NOT NULL,
|
||||
art TEXT NOT NULL,
|
||||
reihe INTEGER NOT NULL DEFAULT 0,
|
||||
titel TEXT NOT NULL DEFAULT '',
|
||||
text TEXT NOT NULL DEFAULT '',
|
||||
ziel TEXT,
|
||||
geaendert TEXT NOT NULL,
|
||||
geaendert_von INTEGER REFERENCES personen(id) ON DELETE SET NULL
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS idx_anl_zeile_sicht ON anl_zeile (haus, rolle, art, reihe);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS anl_rolle (
|
||||
haus TEXT NOT NULL DEFAULT 'agentur',
|
||||
rolle TEXT NOT NULL,
|
||||
leitgedanke TEXT NOT NULL DEFAULT '',
|
||||
geaendert TEXT NOT NULL,
|
||||
geaendert_von INTEGER REFERENCES personen(id) ON DELETE SET NULL,
|
||||
PRIMARY KEY (haus, rolle)
|
||||
);
|
||||
`;
|
||||
|
||||
/* =====================================================================
|
||||
DIE INHALTE
|
||||
|
||||
Woertlich aus dem Bauplan vom 06.10.2026, Kapitel 06. Gewonnen mit
|
||||
`pdftotext -raw`, NICHT mit `-layout`: Der Layout-Auszug verschiebt
|
||||
Tabellenzellen. Dort stand "Schulung und Community-Call laufen
|
||||
woechentlich von allein" beim Eintrag *Mein Profil* statt bei
|
||||
*Kalender* — eine Zeile, die man ohne Verdacht uebernommen und nie
|
||||
wiedergefunden haette.
|
||||
|
||||
Die Stufen stammen aus Kapitel 05. Sie sind ab Etappe 4 in der
|
||||
Pflege-Ansicht aenderbar, ohne dass hier jemand etwas anfasst —
|
||||
deshalb ist diese Liste eine ERSTBEFUELLUNG und keine Wahrheit.
|
||||
===================================================================== */
|
||||
|
||||
export const INHALTE = {
|
||||
creator: {
|
||||
leitgedanke:
|
||||
"Das ist dein eigener Bereich. Du siehst nur, was zu dir gehört. "
|
||||
+ "Deine Betreuung trägt ein, du liest mit, antwortest und hakst ab.",
|
||||
saetze: [
|
||||
"Du musst nicht alles kennen. Fünf Kacheln reichen für den Anfang.",
|
||||
"Was heute dran ist, steht immer auf der Zentrale unter „Was ist dran“.",
|
||||
"Fast alles andere füllt deine Betreuung für dich. Du liest und antwortest.",
|
||||
],
|
||||
schritte: [
|
||||
{ titel: "Mein Profil", ziel: "profil.html",
|
||||
text: "Bild wählen, einen Satz über dich schreiben, TikTok-Namen eintragen, speichern." },
|
||||
{ titel: "Schutz & Regeln", ziel: "bereich.html?b=schutz",
|
||||
text: "Unterweisungen lesen und zusammen mit deiner Betreuung bestätigen." },
|
||||
{ titel: "Aufgaben", ziel: "aufgaben.html",
|
||||
text: "Nachsehen, ob schon etwas für dich offen ist." },
|
||||
{ titel: "Kalender", ziel: "kalender.html",
|
||||
text: "Termine in deinen eigenen Kalender holen (Google, Apple, Outlook)." },
|
||||
/* KEIN ZIEL. "Installieren" ist keine Kachel, sondern der Knopf
|
||||
in der Kopfleiste. Ein Sprung auf eine Seite waere hier falsch
|
||||
-- und ein Sprung ins Leere erst recht. */
|
||||
{ titel: "Installieren", ziel: null,
|
||||
text: "Oben antippen, dann hast du den Workspace als App auf dem Handy." },
|
||||
],
|
||||
karten: [
|
||||
{ kachel: "aufgaben", stufe: "muss",
|
||||
wozu: "Was du zu tun hast.",
|
||||
tust: "Annehmen, bearbeiten, zur Freigabe geben, Rückmeldung schreiben.",
|
||||
merke: "„Zur Freigabe“ heißt: Jemand schaut noch drauf." },
|
||||
{ kachel: "chat", stufe: "muss",
|
||||
wozu: "Nachrichten mit deinem Team.",
|
||||
tust: "Mit „Neu“ ein Gespräch beginnen.",
|
||||
merke: "Fehler an der Seite gehören in Support, nicht in den Chat." },
|
||||
{ kachel: "kalender", stufe: "muss",
|
||||
wozu: "Termine und Calls.",
|
||||
tust: "Termine ansehen, eigene anlegen.",
|
||||
merke: "Schulung und Community-Call laufen wöchentlich von allein." },
|
||||
{ kachel: "profil", stufe: "muss",
|
||||
wozu: "Wer du bist und wohin du willst.",
|
||||
tust: "Einmal ausfüllen: Bild, Kanäle, Stammdaten, Ziele, 90-Tage-Plan.",
|
||||
merke: "Nur du schreibst deinen Eintrag." },
|
||||
{ kachel: "bereich:schutz", stufe: "muss",
|
||||
wozu: "Regeln, die du kennen musst.",
|
||||
tust: "Einmal: Dokument öffnen, durchgehen, bestätigen.",
|
||||
merke: "Nach der Bestätigung von beiden Seiten nicht mehr änderbar." },
|
||||
|
||||
{ kachel: "bereich:live", stufe: "regelmaessig",
|
||||
wozu: "Dein LIVE besser machen.",
|
||||
tust: "Vor und nach dem LIVE: Bewertungen und Notizen lesen, an jedem Punkt antworten.",
|
||||
merke: "Geordnet nach vor, während, nach der Sendung." },
|
||||
{ kachel: "leistung", stufe: "regelmaessig",
|
||||
wozu: "Diamanten, LIVE-Tage, Verweildauer.",
|
||||
tust: "Wochenzahlen und Ziele ansehen.",
|
||||
merke: "Kommen aus Backstage und werden eingetragen, nicht automatisch geholt." },
|
||||
{ kachel: "calls", stufe: "regelmaessig",
|
||||
wozu: "Gespräche mit To-dos.",
|
||||
tust: "Nachlesen, was besprochen wurde. Der Call-Raum ist verlinkt.",
|
||||
merke: "To-dos landen direkt bei deinen Aufgaben." },
|
||||
{ kachel: "bereich:agentur", stufe: "regelmaessig",
|
||||
wozu: "Events und offizielle Wege.",
|
||||
tust: "Event-Aufgaben ansehen, Rückmeldung geben, Anliegen an die Agentur stellen.",
|
||||
merke: "Teilnahmebedingungen stehen beim Event." },
|
||||
{ kachel: "content", stufe: "regelmaessig",
|
||||
wozu: "Von der Idee bis zum Upload.",
|
||||
tust: "Sehen, was geplant ist, und antworten.",
|
||||
merke: "Fünf Stufen: Idee, Hook & Skript, Gedreht, Fertig & geplant, Veröffentlicht." },
|
||||
{ kachel: "report", stufe: "regelmaessig",
|
||||
wozu: "Rückblick und nächste Schritte.",
|
||||
tust: "Einmal im Monat: Zeitraum wählen (7, 30 oder 90 Tage).",
|
||||
merke: "Ein Review endet mit einer Entscheidung." },
|
||||
|
||||
{ kachel: "uebersicht", stufe: "bedarf",
|
||||
wozu: "Dein Stand auf einen Blick.",
|
||||
tust: "Nachsehen: nächster Termin, offene Aufgaben, Start-Check.",
|
||||
merke: "Was dran ist, zeigt dir schon die Zentrale." },
|
||||
{ kachel: "startcheck", stufe: "bedarf",
|
||||
wozu: "Erstanalyse deines Kanals.",
|
||||
tust: "Ansehen, was passt und was nicht, in 16 Punkten.",
|
||||
merke: "Grundlage für deinen 90-Tage-Plan." },
|
||||
{ kachel: "bereich:community", stufe: "bedarf",
|
||||
wozu: "Moderation und Konflikte.",
|
||||
tust: "Nachlesen, wenn es im Chat unruhig wird.",
|
||||
merke: "Ruhig statt Drama." },
|
||||
{ kachel: "bereich:technik", stufe: "bedarf",
|
||||
wozu: "Setup, Fehler, Lösungen.",
|
||||
tust: "Nachschlagen, wenn etwas klemmt.",
|
||||
merke: "Erst hier schauen, dann fragen." },
|
||||
{ kachel: "dateien", stufe: "bedarf",
|
||||
wozu: "Ablage für dich.",
|
||||
tust: "Dateien öffnen, die für dich abgelegt wurden.",
|
||||
merke: "Du kannst hier nichts hochladen." },
|
||||
{ kachel: "wissen", stufe: "bedarf",
|
||||
wozu: "Anleitungen zu TikTok und Technik.",
|
||||
tust: "Nach Stufe, Gerät oder Tag filtern.",
|
||||
merke: "Hier geht es um Streaming, nicht um den Workspace." },
|
||||
{ kachel: "support", stufe: "bedarf",
|
||||
wozu: "Etwas ist kaputt.",
|
||||
tust: "Kurz beschreiben, bis zu drei Bilder anhängen, abschicken.",
|
||||
merke: "DogFather und die rechte Hand kümmern sich." },
|
||||
],
|
||||
nicht: [
|
||||
{ titel: "Zahlen eintragen.", text: "Das macht deine Betreuung." },
|
||||
{ titel: "Start-Check und LIVE-Analyse bewerten.", text: "Du liest und antwortest nur." },
|
||||
{ titel: "Protokolle schreiben.", text: "Du liest sie nach." },
|
||||
{ titel: "Dateien hochladen.", text: "Geht in deiner Ansicht nicht." },
|
||||
{ titel: "Jede Kachel täglich öffnen.", text: "Die Zentrale sagt dir, was dran ist." },
|
||||
],
|
||||
takt: [
|
||||
{ titel: "Täglich", text: "Zentrale („Was ist dran“), Aufgaben, Chat." },
|
||||
{ titel: "Vor und nach dem LIVE", text: "LIVE-Analyse und Zahlen." },
|
||||
{ titel: "Wöchentlich", text: "Kalender, Calls & Protokolle, Agentur." },
|
||||
{ titel: "Monatlich", text: "Reports & Review und dein 90-Tage-Plan in Mein Profil." },
|
||||
],
|
||||
fragen: [
|
||||
{ titel: "Muss ich jede Kachel kennen?",
|
||||
text: "Nein. Fang mit den fünf Muss-Kacheln an. Der Rest kommt, wenn du ihn brauchst." },
|
||||
{ titel: "Ich habe meinen Code verloren.",
|
||||
text: "Sag deiner Betreuung oder DogFather Bescheid. Du bekommst einen neuen, "
|
||||
+ "der alte gilt dann nicht mehr." },
|
||||
{ titel: "Warum sehe ich keine Zahlen?",
|
||||
text: "Für die Woche wurde noch kein Tag eingetragen. Sprich deine Betreuung an." },
|
||||
{ titel: "Wer sieht mein Profil?",
|
||||
text: "Dein Team: Bild, Name und was du über dich geschrieben hast." },
|
||||
],
|
||||
},
|
||||
};
|
||||
|
||||
/* =====================================================================
|
||||
ANLEGEN UND ERSTBEFUELLEN
|
||||
===================================================================== */
|
||||
|
||||
/** Spielt eine Rolle ein — aber nur, wenn fuer sie noch GAR NICHTS da ist.
|
||||
*
|
||||
* DAS IST DIE WICHTIGSTE ZEILE DIESER DATEI. Ein Einspielen bei jedem
|
||||
* Serverstart wuerde jede Aenderung aus der Pflege-Ansicht beim
|
||||
* naechsten Neustart ueberschreiben — lautlos, und man wuerde es erst
|
||||
* Wochen spaeter merken, wenn jemand fragt, warum sein Text wieder
|
||||
* der alte ist.
|
||||
*
|
||||
* Gepruefte Bedingung ist "keine einzige Karte dieser Rolle", nicht
|
||||
* "Tabelle leer": Sonst bekaeme Rolle zwei nichts mehr, sobald Rolle
|
||||
* eins drin ist. */
|
||||
function rolleEinspielen(d, haus, rolle, inhalt, jetzt) {
|
||||
const schon = d.prepare(
|
||||
"SELECT COUNT(*) n FROM anl_karte WHERE haus = ? AND rolle = ?").get(haus, rolle)?.n ?? 0;
|
||||
if (schon > 0) return 0;
|
||||
|
||||
const karte = d.prepare(
|
||||
`INSERT INTO anl_karte (haus, rolle, kachel, stufe, wozu, tust, merke, reihe, geaendert)
|
||||
VALUES (?,?,?,?,?,?,?,?,?)`);
|
||||
const zeile = d.prepare(
|
||||
`INSERT INTO anl_zeile (haus, rolle, art, reihe, titel, text, ziel, geaendert)
|
||||
VALUES (?,?,?,?,?,?,?,?)`);
|
||||
|
||||
let n = 0;
|
||||
inhalt.karten.forEach((k, i) => {
|
||||
karte.run(haus, rolle, k.kachel, k.stufe, k.wozu, k.tust, k.merke, i, jetzt);
|
||||
n++;
|
||||
});
|
||||
const listen = [
|
||||
["satz", inhalt.saetze.map((t) => ({ titel: "", text: t, ziel: null }))],
|
||||
["schritt", inhalt.schritte],
|
||||
["nicht", inhalt.nicht],
|
||||
["takt", inhalt.takt],
|
||||
["frage", inhalt.fragen],
|
||||
];
|
||||
for (const [art, liste] of listen) {
|
||||
liste.forEach((z, i) => {
|
||||
zeile.run(haus, rolle, art, i, z.titel ?? "", z.text ?? "", z.ziel ?? null, jetzt);
|
||||
n++;
|
||||
});
|
||||
}
|
||||
d.prepare(
|
||||
`INSERT INTO anl_rolle (haus, rolle, leitgedanke, geaendert) VALUES (?,?,?,?)
|
||||
ON CONFLICT(haus, rolle) DO NOTHING`).run(haus, rolle, inhalt.leitgedanke, jetzt);
|
||||
return n;
|
||||
}
|
||||
|
||||
export function anleitungTabellen(d) {
|
||||
d.exec(TABELLEN);
|
||||
|
||||
const jetzt = new Date().toISOString();
|
||||
let gesamt = 0;
|
||||
const neu = [];
|
||||
for (const rolle of FASSUNGEN) {
|
||||
const inhalt = INHALTE[rolle];
|
||||
/* Eine Rolle ohne Inhalte ist kein Fehler, sondern der Stand der
|
||||
Arbeit: Etappe 1 bringt nur den Creator, die drei anderen kommen
|
||||
in Etappe 3. Still uebergehen — aber die Zuordnungspruefung
|
||||
weiss davon und meldet es als offen, nicht als in Ordnung. */
|
||||
if (!inhalt) continue;
|
||||
const n = rolleEinspielen(d, "agentur", rolle, inhalt, jetzt);
|
||||
if (n) { gesamt += n; neu.push(`${rolle} ${n}`); }
|
||||
}
|
||||
if (gesamt) {
|
||||
console.log(`[workspace] Anleitung: ${gesamt} Zeilen erstbefuellt (${neu.join(", ")}).`);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user