Aller au contenu principal

FAQ - Questions frequentes

General

Quelle est la stack technique ?

NestJS 10, TypeScript 5.3, Prisma 6, PostgreSQL 16, Redis 7.

Ou est la documentation API interactive ?

Swagger UI est disponible sur /api/docs (http://localhost:3000/api/docs en local).

Comment obtenir un token JWT ?

POST /api/v2/auth/login

Avec email et password dans le body de la requete.

Combien de temps dure un access token ?

15 minutes. Utilisez le refresh token pour en obtenir un nouveau via POST /api/v2/auth/refresh.

Combien de profils par compte ?

Maximum 4 profils par compte (configurable par tenant).


Developpement

Comment installer le projet ?

git clone <repo>
cd mytv-api
npm install
cp .env.example .env
npm run docker:up
npm run prisma:migrate:dev
npm run prisma:generate
npm run start:dev

Comment ajouter un nouvel endpoint ?

  1. Creer le DTO dans application/dtos/{feature}/
  2. Ajouter la methode dans le service
  3. Ajouter la route dans le controller
  4. Ajouter les tests
  5. Mettre a jour Swagger

Comment lancer les tests ?

npm run test          # Tests unitaires
npm run test:e2e # Tests E2E
npm run test:cov # Avec couverture

Comment debugger l'application ?

npm run start:debug

Puis attacher VS Code au debugger (port 9229).

Comment generer les migrations Prisma ?

npm run prisma:migrate:dev -- --name nom_de_la_migration

API

Comment paginer les resultats ?

Utiliser les query parameters page et limit :

GET /api/v2/movies?page=1&limit=10

Comment filtrer le contenu ?

Utiliser les query parameters specifiques a chaque ressource :

GET /api/v2/movies?genre=action&accessType=FREE

Quelle est la limite de rate limiting ?

TierLimiteFenetre
Short3 requetes1 seconde
Medium20 requetes10 secondes
Long100 requetes1 minute

Le rate limiting est applique par profil (pas par compte) et ne peut pas etre contourne.

Comment changer la langue des reponses ?

Deux options :

  • Header : Accept-Language: en-US
  • Query parameter : ?lang=en_US

Locales supportees : fr_FR (defaut), en_US.

Comment obtenir un stream token ?

Le token de streaming est genere dynamiquement :

  1. Se connecter via POST /api/v2/auth/login pour obtenir un accessToken
  2. Generer un stream token via POST /api/v2/streaming/token avec accessToken + mediaType + mediaId
  3. Utiliser le stream token dans le header X-Stream-Token pour acceder au contenu

DevOps

Comment deployer en staging ?

docker compose --profile staging up -d --build

Ou via CI/CD : push sur develop, le pipeline deploie automatiquement.

Comment voir les logs en production ?

# Docker
docker logs mytv-api-prod --tail 100 -f

# Kubernetes
kubectl logs -f deployment/mytv-api -n mytv

Comment scaler l'application ?

Le HPA (Horizontal Pod Autoscaler) scale automatiquement entre 2 et 10 pods selon le CPU.

Ou sont les dashboards de monitoring ?

ServiceURLIdentifiants
Grafanahttp://localhost:3001admin / admin
Prometheushttp://localhost:9090-
Alertmanagerhttp://localhost:9093-

Comment executer le seed dans un conteneur ?

docker exec -it mytv-api-staging ./node_modules/.bin/prisma db seed

Le script de seed detecte automatiquement l'environnement (production utilise dist/prisma/seed.js, developpement utilise ts-node).


Securite

Comment reporter une vulnerabilite ?

Email a [email protected].

Les mots de passe sont-ils securises ?

Oui, hashes avec bcrypt (cost factor 12).

Le trafic est-il chiffre ?

Oui, TLS 1.3 en production.

Comment fonctionne le controle parental ?

Les profils de type KIDS ont des restrictions server-side :

  • Rating d'age maximum
  • Categories de contenu autorisees
  • Fenetres horaires de visionnage
  • Limite quotidienne en minutes
  • Protection par PIN (4-6 chiffres)

Troubleshooting

L'API ne demarre pas

Verifier :

  1. Services Docker (PostgreSQL, Redis) demarres : docker-compose ps
  2. Variables .env configurees : cp .env.example .env
  3. Prisma client genere : npm run prisma:generate
  4. Migrations appliquees : npm run prisma:migrate:dev

Erreur de connexion PostgreSQL

docker ps | grep postgres
docker logs mytv-postgres

Verifier que DATABASE_URL est correcte dans le fichier .env.

Erreur "Token expired"

Utiliser le refresh token pour obtenir un nouveau access token via POST /api/v2/auth/refresh.

Rate limit atteint (429)

Attendre le reset (voir header X-RateLimit-Reset) ou reduire la frequence des requetes. Implementer un backoff exponentiel cote client.

Erreur de validation au demarrage

Config validation error: "JWT_SECRET" length must be at least 32 characters long

Generer des secrets adequats :

node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"

Erreur Firebase Private Key

Verifier que les retours a la ligne sont correctement echappes dans le fichier .env :

FIREBASE_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBg...\n-----END PRIVATE KEY-----\n"

Support

Ou trouver plus d'aide ?

  • Documentation : Cette documentation Docusaurus
  • Issues : GitHub Issues
  • Slack : #mytv-api-support
  • Swagger UI : /api/docs