L'implémentation de référence
ApiborneDemoImpl est un mini système de gestion médical volontairement lisible — Next.js, TypeScript strict, SQLite sans ORM — qui implémente l'intégralité du contrat. Chaque handler tient dans un fichier commenté : c'est la réponse exécutable à « comment on est censé faire ? ».
À quoi sert ce repo
- Comparer : les 9 tests de la check-list de conformité passent contre lui — lancez-le en face de votre implémentation et comparez les réponses ;
- Copier : auth, erreurs, CORS et mappers sont des modules autonomes transposables dans n'importe quelle stack ;
- Tester une vraie borne : il expose le contrat complet, une borne ApiBorne peut faire un parcours entier contre lui (identification, documents, ticket).
Le lancer en local
bash
git clone https://github.com/ApiBorne/ApiborneDemoImpl.git
cd ApiborneDemoImpl
npm install
npm run dev # http://localhost:3020 — agenda /, patients /patients, réglages /settingsLa base SQLite est créée et peuplée au premier lancement (patients factices, RDV du jour). Le bouton « Reset demo data » de la page
/settings ramène l'état initial à tout moment.Les 12 opérations, fichier par fichier
S'y ajoutent les 5 routes de configuration (…/config/*/route.ts) et le client sortant (src/server/apiborne/client.ts).
Les briques partagées
src/server/contract/auth.ts— les deux headers, device d'abord, 401 typés ;src/server/contract/errors.ts— corps d'erreur normalisé + garde-fou d'exceptions ;src/server/contract/cors.ts— preflights OPTIONS ;src/server/contract/mappers.ts— lignes SQLite → DTO contrat (camelCase, ISO, vendorData, id{id}~{visibleId}) ;src/server/db/repositories.ts— accès données synchrones, une fonction par besoin.
La sémantique du contrat (idempotence, transitions d'état, mapping d'erreurs) vit dans les handlers, pas dans ces briques — chaque route se lit isolément.
