- 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
716 B
TypeScript
19 lines
716 B
TypeScript
/**
|
|
* Plugin Karbé — hooks d'activation/désactivation par plugin.
|
|
*
|
|
* Chaque plugin peut déclarer un `onEnable` et/ou `onDisable` ici. Exemples
|
|
* d'usage : seed initial des carbets démo (au enable), soft-delete des
|
|
* carbets démo (au disable). Les hooks ne sont **pas** des migrations DB —
|
|
* pour ça on passe par les fichiers prisma/migrations.
|
|
*/
|
|
|
|
export type PluginHook = () => Promise<void>;
|
|
|
|
export interface PluginHookSet {
|
|
onEnable?: PluginHook;
|
|
onDisable?: PluginHook;
|
|
}
|
|
|
|
// Pour l'instant, vide : les plugins métier ajouteront leurs hooks ici
|
|
// au fur et à mesure (sans toucher au runtime du système Plugin).
|
|
export const pluginHooks: Record<string, PluginHookSet | undefined> = {};
|