# Journal backend `naturoBack`

## 2026-03-25

### Source lue
- Document technique V1.1 : `C:\Users\fanjo\Documents\1. Dev\2. Projet - Site\21.Naturopathe\2.Doc\V1\naturopathe_site_doc_technique_V1.docx`

### Cadrage retenu
- Stack backend : Node.js + Express.
- Base de donnees : MySQL / MariaDB via Sequelize + `mysql2`.
- Auth admin : session serveur + cookie HttpOnly.
- Blog administrable proprietaire, sans CMS externe.
- Reservation hors scope backend V1 : redirection vers Resalib uniquement.

### Perimetre fonctionnel backend V1
- API publique :
  - `GET /api/posts`
  - `GET /api/posts/:slug`
  - `POST /api/contact`
- API admin :
  - `POST /api/admin/login`
  - `POST /api/admin/logout`
  - `GET /api/admin/me`
  - `GET /api/admin/posts`
  - `POST /api/admin/posts`
  - `PUT /api/admin/posts/:id`
  - `DELETE /api/admin/posts/:id`
  - `POST /api/admin/upload`
  - `GET /api/admin/settings`
  - `PUT /api/admin/settings`

### Modele de donnees a prevoir
- `admins`
- `posts`
- `contact_messages`
- `settings` (optionnelle mais prevue dans la spec)

### Contraintes techniques importantes
- Validation serveur systematique sur tous les payloads.
- Reponses JSON homogenes : `success`, `message`, `data`, `errors`.
- Codes HTTP attendus : `200`, `201`, `400`, `401`, `404`, `409`, `500`.
- Nettoyage du HTML des articles avant stockage ou rendu.
- Controle strict des uploads : type, taille, extension.
- Rate limiting sur login admin et formulaire de contact.
- Logs serveur explicites, messages client non verbeux.
- Variables d'environnement a prevoir : `PORT`, `APP_BASE_URL`, `DB_*`, `SESSION_SECRET`, `SMTP_*`, `RESALIB_URL`, `UPLOAD_DIR`.

### Hors scope confirme
- Moteur de reservation interne.
- Paiement en ligne.
- Espace client public.
- Multilingue.
- Multi-praticien.

### TODO de demarrage
- Initialiser l'arborescence `src/` conforme a la doc.
- Installer Express, Sequelize, `mysql2`, gestion de session, bcrypt, validation, upload et securite HTTP.
- Poser la configuration `.env` et la connexion base.
- Creer les modeles Sequelize et la strategie de sync/migration.
- Mettre en place le squelette API versionnee et les middlewares communs.
- Implementer en premier : auth admin, CRUD posts, contact, upload.

### Points ouverts a garder visibles
- Envoi email automatique apres contact : recommande mais optionnel en V1.
- Stockage images : local probable, a confirmer avant prod.
- Strategie exacte de deploiement / hebergement non figee.

### Implementation realisee
- Initialisation du projet Node avec scripts `dev`, `start`, `db:sync` et `admin:seed`.
- Mise en place d'une architecture backend par couches : `config`, `models`, `routes`, `controllers`, `services`, `middlewares`, `validators`, `utils`.
- Bootstrap Express avec `helmet`, `compression`, parsing JSON, session serveur, logs HTTP et route `GET /health`.
- Configuration centralisee via `.env` avec validation des variables.
- Connexion MySQL / MariaDB via Sequelize.
- Store de session Sequelize pour persister les sessions admin.
- Upload local d'images via Multer avec filtrage MIME et limite de taille.

### API codee a ce stade
- Public :
  - `GET /api/posts`
  - `GET /api/posts/:slug`
  - `POST /api/contact`
- Admin :
  - `POST /api/admin/login`
  - `POST /api/admin/logout`
  - `GET /api/admin/me`
  - `GET /api/admin/posts`
  - `GET /api/admin/posts/:id`
  - `POST /api/admin/posts`
  - `PUT /api/admin/posts/:id`
  - `DELETE /api/admin/posts/:id`
  - `POST /api/admin/upload`
  - `GET /api/admin/settings`
  - `PUT /api/admin/settings`

### Securite et robustesse codees
- Validation d'entree avec `zod`.
- Rate limiting sur login admin et formulaire de contact.
- Reponses JSON homogenes `success/message/data/errors`.
- Middleware global de gestion d'erreurs.
- Auth admin par session + cookie `HttpOnly`.
- Sanitization du HTML article avant stockage.

### Commandes utiles
- `npm install`
- `npm run db:sync`
- `npm run admin:seed`
- `npm run dev`

### Verification effectuee
- Chargement des modules principaux Node sans erreur de syntaxe.
- Verification rapide du schema contact et de la generation de slug via scripts temporaires hors repo.
- Nom de base par defaut aligne sur `kezl8748_naturo` dans la configuration locale.

### Suite recommandee
- Ajouter la notification email optionnelle sur le formulaire de contact si le SMTP est confirme.
- Prevoir soit des migrations Sequelize, soit une convention de sync plus stricte avant la production.
- Brancher le front admin sur les routes creees et tester le flux complet login > upload > creation article > publication.
