- Modèle Prisma Plugin (key, name, description, category, version, enabled, config JSONB, migrationsApplied, timestamps) + migration SQL - PluginRegistry (src/lib/plugins/registry.ts) avec 12 plugins déclarés : visuels (theme-guyane, landing-hero, landing-sections, image-gallery-seed, demo-carbets-seed), métier (access-type, seasonality, pirogue-providers, min-stay), contenus (content-pages, legal-pages), i18n (i18n-fr-en) - Server helpers (server.ts) : sync, isEnabled, getEnabledKeys, toggle avec hooks onEnable/onDisable, updateConfig, cache 5s - Client bridge (client.tsx) : PluginProvider + useIsPluginEnabled - Composant <IfPluginEnabled plugin=... fallback=...> - Guard requirePluginOr404 pour pages et routes - Page admin /admin/plugins avec table toggle par catégorie + édition config - Route PATCH /api/admin/plugins/[key] + GET - Layout async qui sync registry + passe enabledKeys au PluginProvider Tous plugins en enabled=false par défaut, activation pilotée depuis l'admin.
19 lines
653 B
SQL
19 lines
653 B
SQL
-- Foundation : système Plugin Karbé
|
|
|
|
CREATE TABLE "Plugin" (
|
|
"key" TEXT PRIMARY KEY,
|
|
"name" TEXT NOT NULL,
|
|
"description" TEXT NOT NULL,
|
|
"category" TEXT NOT NULL,
|
|
"version" TEXT NOT NULL DEFAULT '0.1.0',
|
|
"enabled" BOOLEAN NOT NULL DEFAULT false,
|
|
"config" JSONB NOT NULL DEFAULT '{}',
|
|
"migrationsApplied" TEXT[] NOT NULL DEFAULT ARRAY[]::TEXT[],
|
|
"installedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
"lastEnabledAt" TIMESTAMP(3),
|
|
"lastDisabledAt" TIMESTAMP(3)
|
|
);
|
|
|
|
CREATE INDEX "Plugin_category_idx" ON "Plugin" ("category");
|
|
CREATE INDEX "Plugin_enabled_idx" ON "Plugin" ("enabled");
|