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 ?
- Creer le DTO dans
application/dtos/{feature}/ - Ajouter la methode dans le service
- Ajouter la route dans le controller
- Ajouter les tests
- 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 ?
| Tier | Limite | Fenetre |
|---|---|---|
| Short | 3 requetes | 1 seconde |
| Medium | 20 requetes | 10 secondes |
| Long | 100 requetes | 1 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 :
- Se connecter via
POST /api/v2/auth/loginpour obtenir unaccessToken - Generer un stream token via
POST /api/v2/streaming/tokenavecaccessToken+mediaType+mediaId - Utiliser le stream token dans le header
X-Stream-Tokenpour 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 ?
| Service | URL | Identifiants |
|---|---|---|
| Grafana | http://localhost:3001 | admin / admin |
| Prometheus | http://localhost:9090 | - |
| Alertmanager | http://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 :
- Services Docker (PostgreSQL, Redis) demarres :
docker-compose ps - Variables
.envconfigurees :cp .env.example .env - Prisma client genere :
npm run prisma:generate - 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