LoreKeeper
Architektur

Directus Integration & Extension

Native Directus SDK Anbindung, Fail-Fast Startup-Ping und deklaratives Schema-Management

Directus Integration & Extension

Die Datenpersistenz von LoreKeeper basiert auf Directus 12. Das Backend verbindet sich direkt über das offizielle @directus/sdk mit einem statischen Admin- oder Servicetoken.


Directus SDK Anbindung (src/plugins/directus.ts)

Die Anbindung ist als Fastify-Plugin gekapselt. Über Modul-Augmentierung steht fastify.directus in allen Routen und Services zur Verfügung:

src/plugins/directus.ts
import { createDirectus, rest, staticToken, serverPing } from '@directus/sdk';
import fp from 'fastify-plugin';

const directusPlugin = async (fastify) => {
  const client = createDirectus(env.DIRECTUS_URL)
    .with(rest())
    .with(staticToken(env.DIRECTUS_TOKEN));

  // Obligatorischer Healthcheck-Ping beim Booten
  try {
    const ping = await client.request(serverPing());
    if (ping !== 'pong') throw new Error(`Ungültige Ping-Antwort: ${ping}`);
    fastify.log.info('✅ Directus Verbindung erfolgreich verifiziert.');
  } catch (err) {
    fastify.log.error('❌ Directus Healthcheck fehlgeschlagen. Serverstart abgebrochen.');
    throw new Error(`Directus nicht erreichbar unter ${env.DIRECTUS_URL}`);
  }

  fastify.decorate('directus', client);
};

Fail-Fast Prinzip: Kann Directus beim Starten des Backends nicht erreicht werden, wird der Prozess sofort mit Fehlercode 1 beendet. So wird verhindert, dass Anfragen in Timeouts laufen.


Deklaratives Schema-Management (liberino-schema-hook)

Anstatt manuelle Klicks im Directus Admin-UI oder fehleranfällige manuelle SQL-Skripte vorauszusetzen, wird das vollständige Datenmodell über die Directus-Extension liberino-schema-hook verwaltet:

  1. Collections: series, books, chapters, scenes, lore_entities, lore_states, style_templates, reference_images, reading_progress.
  2. Fields & Interfaces: Automatische Registrierung von UI-Widgets (z. B. Markdown-Editoren, Farb-Badges für Status, M2O-Dropdowns und JSON-Editoren).
  3. Relations: Fremdschlüssel- und M2O-Beziehungen mit konfigurierbaren Löschweiterleitungen (CASCADE oder SET NULL).
  4. Declarative Sync: Die Extension berechnet einen kryptografischen Hash aller Schemadefinitionen. Ändert sich der Code oder fehlen Collections/Felder in der Datenbank, synchronisiert Directus diese beim Booten automatisch nach.

On this page