feat(plugins): content-pages + legal-pages (Phase 4.1 + 4.3)
Plugin content-pages : - Modèle Prisma ContentPage (slug PK, title, body markdown, category, published) - lib/content-pages.ts : helpers upsert/get/list/unpublish - lib/markdown.ts : mini-renderer markdown server-side sans deps externe (h1-h3, paragraphes, gras/italique, liens, listes ul/ol, hr, blockquote, échappement HTML) - ContentPageRenderer server component, applique le theme Guyane (font-serif) - 5 pages seedées : /a-propos, /faq, /comment-ca-marche, /pour-comites-entreprise, /devenir-loueur - Routes publiques + force-dynamic + guard requirePluginOr404 Plugin legal-pages : - Réutilise le même modèle ContentPage, catégorie 'legal' - 3 pages seedées : /cgv, /mentions-legales, /politique-de-confidentialite (contenu de base, à valider par avocat avant prod réelle) Admin : - /admin/content-pages : table par catégorie, statut publié/dépublié - /admin/content-pages/[slug] : éditeur markdown + toggle publié - PATCH /api/admin/content-pages/[slug] Hooks plugin : - onEnable seed + republish toutes les pages - onDisable dépublie toute la catégorie sans la supprimer (preserve les edits)
This commit is contained in:
parent
ae8f79b436
commit
68f37f554f
20 changed files with 1116 additions and 0 deletions
|
|
@ -15,6 +15,16 @@ export interface PluginHookSet {
|
|||
}
|
||||
|
||||
import { archiveDemoCarbets, seedDemoCarbets } from "./seeds/demo-carbets";
|
||||
import {
|
||||
republishContentPages,
|
||||
seedContentPages,
|
||||
unpublishContentPages,
|
||||
} from "./seeds/content-pages-default";
|
||||
import {
|
||||
republishLegalPages,
|
||||
seedLegalPages,
|
||||
unpublishLegalPages,
|
||||
} from "./seeds/legal-pages-default";
|
||||
|
||||
export const pluginHooks: Record<string, PluginHookSet | undefined> = {
|
||||
"demo-carbets-seed": {
|
||||
|
|
@ -31,4 +41,30 @@ export const pluginHooks: Record<string, PluginHookSet | undefined> = {
|
|||
);
|
||||
},
|
||||
},
|
||||
"content-pages": {
|
||||
onEnable: async () => {
|
||||
const seeded = await seedContentPages();
|
||||
const republished = await republishContentPages();
|
||||
console.log(
|
||||
`[plugin content-pages] seed: ${seeded.created} pages, republished: ${republished}`,
|
||||
);
|
||||
},
|
||||
onDisable: async () => {
|
||||
const unpub = await unpublishContentPages();
|
||||
console.log(`[plugin content-pages] disable: ${unpub} pages dépubliées`);
|
||||
},
|
||||
},
|
||||
"legal-pages": {
|
||||
onEnable: async () => {
|
||||
const seeded = await seedLegalPages();
|
||||
const republished = await republishLegalPages();
|
||||
console.log(
|
||||
`[plugin legal-pages] seed: ${seeded.created} pages, republished: ${republished}`,
|
||||
);
|
||||
},
|
||||
onDisable: async () => {
|
||||
const unpub = await unpublishLegalPages();
|
||||
console.log(`[plugin legal-pages] disable: ${unpub} pages dépubliées`);
|
||||
},
|
||||
},
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue