# MetaBloom API Backend FastAPI isolé pour synchroniser les profils et journaux MetaBloom. Il fournit JWT, Argon2, séparation stricte des données par utilisateur, consentement explicite, CRUD, export JSON et suppression de compte. > MetaBloom est un outil de bien-être, pas un dispositif médical. L’API ne diagnostique pas, n’interprète pas les mesures et ne recommande aucun traitement. En cas de valeur inquiétante ou de symptômes, contacter un professionnel ou les urgences. ## Démarrage local ```bash cd server python -m venv .venv && . .venv/bin/activate pip install -r requirements-dev.txt uvicorn app.main:app --reload ``` Documentation : `http://localhost:8000/docs`. SQLite est utilisé en développement. Pour PostgreSQL, renseigner `DATABASE_URL` d’après `.env.example`. ## Docker Copier `.env.example` vers `.env`, remplacer **tous** les exemples de secrets, puis : ```bash docker compose -f docker-compose.example.yml --env-file .env up --build ``` Le port n’écoute que sur localhost ; placer un reverse proxy TLS devant en production. ## API - `POST /auth/register`, `POST /auth/token`, `POST /auth/guest` - `GET/PUT /profile` - `GET/POST /entries`, `PUT/DELETE /entries/{id}` - `GET /account/export`, `DELETE /account` - `POST /coach/chat` — conversation authentifiée avec Peg - `GET /health` Envoyer `Authorization: Bearer `. La création d’entrées exige `consent_health_data=true`. Les limites de saisie préviennent les erreurs grossières mais ne constituent pas une validation médicale. `/auth/guest` crée une identité pseudonyme privée pour le premier lancement de l’application. Aucun email réel n’est demandé. Une politique de purge des comptes invités expirés doit être activée avant production. ### Peg, coach IA Peg utilise une API compatible OpenAI (`/v1/chat/completions`). La configuration par défaut vise Ollama local et ne nécessite aucune clé. Définir `AI_BASE_URL`, `AI_MODEL` et, si nécessaire, `AI_API_KEY`. Aucun secret n'est commité. Un refus déterministe couvre diagnostic, prescription et dosage ; les urgences renvoient vers le 15/112. Si le modèle est indisponible ou produit une réponse suspecte, l’API renvoie un conseil général sûr avec `source=fallback`. Exemple de corps : `{"message":"Comment reprendre doucement la marche ?","history":[]}`. L’historique est limité à 12 messages et n’est pas persisté par cet endpoint. ## Tests ```bash pytest -q ``` ## Avant production - gérer les schémas avec Alembic plutôt que `create_all` ; - utiliser un gestionnaire de secrets, TLS, sauvegardes chiffrées, rotation et révocation des jetons ; - ajouter rate limiting, journal d’audit sans donnée médicale, MFA et tests de sécurité ; - effectuer AIPD/RGPD, définir conservation/export, contrats de sous-traitance et hébergement HDS si applicable ; - faire qualifier juridiquement la finalité et le statut MDR avant toute fonction clinique.