@mostajs/publication
v0.1.3
Published
Cœur de contenu éditorial pour une plateforme de publication (AMIA) : types article/fiche-cat/découverte/vidéo/projet, statuts & cycle de vie (projet idée→en cours→publié→vendu), taxonomie (3 pôles médecine/informatique/portfolio, audiences, tags, périodi
Maintainers
Readme
@mostajs/publication
Auteur : Dr Hamid MADANI [email protected] Licence : AGPL-3.0-or-later · Niveau : N3 (domaine) · Zéro dépendance, sans build
Cœur de contenu éditorial pour une plateforme de publication (site AMIA / amia.fr). Modélise les publications et leur cycle de vie ; ne fait ni rendu ni persistance (composés au niveau app).
Modèle
- Types :
article,fiche-cat(conduite à tenir médicale),decouverte,video,projet. - Pôles (
domaine) :medecine,informatique,portfolio. - Statuts : contenu
brouillon → publie → archive; projetidee → en-cours → publie → vendu. - Taxonomie :
audience(praticiens/patients/tech/tous),tags,periodicite(quotidien/hebdomadaire/mensuel/hors-serie). - Champs :
title, slug, summary, body(Markdown),references,media,links(démo/npm/code/pdf),cat(gabarit fiche CAT), dates.
Usage
import { createPublication } from '@mostajs/publication'
const pub = createPublication() // store en mémoire par défaut (injecter @mostajs/orm en prod)
const a = pub.create({ type: 'article', domaine: 'medecine', title: 'Le glaucome', body: '# ...', tags: ['ophtalmologie'] })
pub.publish(a.id)
const p = pub.create({ type: 'projet', title: 'Hadhinat', links: { demo: 'https://market.amia.fr' } }) // statut 'idee'
pub.setProjectStatus(p.id, 'publie')
pub.list({ domaine: 'medecine', q: 'glau' }) // recherche + filtres
pub.feed() // fil des publiés (home / RSS / newsletter)
pub.taxonomy() // { domaines, types, statuts, tags } pour la navigationAPI
createPublication({ store?, now?, idgen? }) -> { create, update, publish, archive, setProjectStatus, get, list, feed, taxonomy, store }
store: dépôt injecté{ all, get, save, remove }— DB-agnostique ; défautmemoryStore(). En production, brancher@mostajs/orm/@mostajs/data-plug.list(filter):{ type, domaine, statut, audience, tag, periodicite, q }, trié par date décroissante.get(slugOrId): par id ou par slug.
Exports : TYPES, DOMAINES, AUDIENCES, CONTENT_STATUS, PROJECT_STATUS, PERIODICITES, slugify, validate, statutsFor, memoryStore.
Composition (au niveau app, pas ici)
Rendu du body Markdown → @mostajs/markdown-html ; export PDF → @mostajs/doc-export ;
médias/fichiers → @mostajs/storage ; droits d'écriture → @mostajs/rbac ; thème → @mostajs/palette.
UI (cartes, article, gabarit fiche CAT, carte projet) → @mostajs/publication-ui.
Tests
npm test