Skip to content

healthai-api

REST API de la plateforme HealthAI Coach — gestion des utilisateurs, données de santé et datasets IA.

Stack

CoucheTechnologie
FrameworkNestJS 11 (Express)
LangageTypeScript 5.7
Base de donnéesPostgreSQL 15 via TypeORM 0.3
AuthentificationZitadel (OIDC — RS256 JWKS)
Validationclass-validator · class-transformer · Joi
SécuritéHelmet · @nestjs/throttler
DocsSwagger / OpenAPI à /api
MonitoringNestJS Terminus (/health)
TestsJest · Supertest

Modèle de sécurité

Requête entrante

Rate limiter      — 100 req / 60s par IP (configurable)

Zitadel JWT       — RS256, issuer + audience validés via JWKS

Endpoint

L'API ne génère jamais de tokens. Les clés JWKS sont mises en cache 10 minutes — pas d'appel réseau par requête après le premier fetch.

Installation

bash
npm install
cp .env.example .env
npm run migration:run
npm run start:dev
# → http://localhost:3001
# → http://localhost:3001/api (Swagger)

Variables d'environnement

VariableRequisDescription
DATABASE_URLOuiPostgreSQL connection string
ZITADEL_DOMAINOuiURL de l'instance Zitadel
JWT_ISSUEROuiDoit correspondre au claim iss dans les tokens Zitadel
JWT_AUDIENCEOuiClient ID de l'app NestJS dans Zitadel
FRONTEND_ORIGINOuiOrigines CORS autorisées (séparées par virgule)
THROTTLE_TTLNonFenêtre rate limit en ms (défaut: 60000)
THROTTLE_LIMITNonRequêtes max par fenêtre par IP (défaut: 100)
PORTNonPort HTTP (défaut: 3001)

Endpoints

GroupeBase pathNotes
AuthGET /auth/validateForward-auth Traefik — valide Bearer, injecte X-User-Id
HealthGET /healthPublic — ping BDD
UtilisateursCRUD /utilisateurs
AlimentsCRUD /aliments
ExercicesCRUD /exercices
Logs alimentationCRUD /log-aliment
Logs séancesCRUD /log-seance
Logs santéCRUD /log-sante
Profils santéCRUD /profil-santeUn par utilisateur
Dataset régimesCRUD /datasets/recommandations-regimeDonnées pré-nettoyées pour l'IA
Dataset séancesCRUD /datasets/historique-seance-exerciceDonnées pré-nettoyées pour l'IA

Toutes les routes sauf GET /health requièrent un Bearer token Zitadel valide.

Scripts utiles

bash
# Migrations
npm run migration:generate   # Générer depuis les changements d'entités
npm run migration:run        # Appliquer les migrations en attente
npm run migration:revert     # Annuler la dernière migration

# Seed (développement uniquement)
npm run seed:dev-account

# Tests
npm run test                 # Unitaires
npm run test:cov             # Couverture
npm run test:e2e             # End-to-end

Configuration Zitadel

  1. Créer une application API dans ton projet Zitadel
  2. JWT_AUDIENCE = Client ID de l'application
  3. JWT_ISSUER = URL de l'instance Zitadel
  4. L'API valide les tokens sur {ZITADEL_DOMAIN}/oauth/v2/keys (JWKS)