Architecture Technique — MyTelevision API v2
Vue d'ensemble
MyTelevision API v2 est une application backend NestJS suivant les principes de Clean Architecture pour une separation claire des responsabilites et une testabilite maximale. L'API alimente une plateforme de streaming multi-tenant proposant films, series, TV en direct, radio, podcasts, replays, evenements en direct et actualites.
Chiffres cles
| Metrique | Valeur |
|---|---|
| Modules NestJS | 72 |
| Controllers | 60 |
| Endpoints REST | 587 |
| Modeles Prisma | 73 |
| Port Production | 3050 |
| Port Staging | 3051 |
| Port Developpement | 3052 |
Diagramme de Contexte (C4 Level 1)
Vue d'ensemble du systeme et ses interactions avec les acteurs externes.
Diagramme de Conteneurs (C4 Level 2)
Architecture des conteneurs et services deployes.
Diagramme de Composants (C4 Level 3)
Structure interne de l'API NestJS suivant la Clean Architecture.
Couches de l'Architecture
1. Presentation Layer (Couche Presentation)
Responsable de la gestion des requetes HTTP et des reponses.
src/presentation/
├── controllers/
│ ├── api/v2/ # API publique (/api/v2/*)
│ │ ├── auth/ # Authentification
│ │ ├── movies/ # Films
│ │ ├── series/ # Series
│ │ ├── live-tv/ # TV en direct
│ │ └── ... # 60 controllers au total
│ └── admin/ # API admin (/api/v2/admin/*)
└── modules/ # 72 modules NestJS
Responsabilites :
- Routing HTTP (587 endpoints)
- Validation des entrees (class-validator)
- Transformation des reponses
- Documentation Swagger/OpenAPI
2. Application Layer (Couche Application)
Contient la logique metier et les cas d'utilisation.
src/application/
├── dtos/ # Data Transfer Objects
│ ├── movies/
│ ├── series/
│ └── ...
└── services/ # Services metier
├── movies/
├── series/
├── auth/
└── ...
Responsabilites :
- Orchestration des operations
- Validation metier
- Transformation des donnees
3. Domain Layer (Couche Domaine)
Contient les entites metier et les interfaces.
src/domain/
├── entities/ # Entites metier
├── interfaces/ # Contrats (repositories, services)
└── value-objects/ # Objets valeur immuables
Responsabilites :
- Definition des entites
- Regles metier invariantes
- Contrats d'interface
4. Infrastructure Layer (Couche Infrastructure)
Implemente les details techniques et les acces externes.
src/infrastructure/
├── cache/ # Service Redis
├── config/ # Configuration (modules)
├── database/ # Prisma ORM (73 modeles)
│ └── prisma/
├── guards/ # Guards de securite
├── i18n/ # Internationalisation (fr_FR, en_US)
├── metrics/ # Metriques Prometheus
└── storage/ # Stockage Cloudflare R2
Responsabilites :
- Acces base de donnees (PostgreSQL 16 via Prisma)
- Cache Redis (sessions, cache, rate limiting)
- Stockage fichiers (Cloudflare R2)
- APIs externes (TMDb, Firebase)
Flux de Donnees
Requete typique
Exemple : GET /api/v2/movies/:id
- Controller recoit la requete
- Guard verifie l'authentification (JWT)
- Interceptor detecte la locale (fr_FR / en_US)
- Service verifie le cache Redis
- Si cache miss, Prisma requete PostgreSQL
- Resultat stocke en cache (TTL: 300s)
- Interceptor localise la reponse
- Response retournee au client
Modules Principaux
Vue d'ensemble des modules
| Domaine | Endpoints API | Statut |
|---|---|---|
| Authentication | /auth, /account-auth | Operationnel |
| User Management | /users, /profiles, /sessions, /devices | Operationnel |
| Content - Live TV | /livetv, /live-events | Operationnel |
| Content - VOD | /movies, /series | Operationnel |
| Content - Audio | /radio, /podcasts | Operationnel |
| Content - Editorial | /news, /replays | Operationnel |
| Engagement | /favorites, /watch-history, /reactions, /views | Operationnel |
| Subscription | /subscription-plans, /subscriptions, /payment-methods | Operationnel |
| Support | /support | Operationnel |
| Streaming | /streaming | Operationnel |
| Settings | /settings, /notifications | Operationnel |
Auth Module
Account / Profile System
Securite
Authentification
Rate Limiting
| Tier | Limite | Fenetre | Cle |
|---|---|---|---|
| Short | 3 req | 1 sec | (tenant_id, profile_id, tier) |
| Medium | 20 req | 10 sec | (tenant_id, profile_id, tier) |
| Long | 100 req | 1 min | (tenant_id, profile_id, tier) |
- Storage : Redis (distribue, cluster-safe)
- Non-bypassable : Impossible de contourner via profile/device switching
Network Security (Kubernetes)
Scalabilite
Horizontal Scaling
Strategie de Cache
Observabilite
Metriques
Metriques exposees :
mytelevision_http_requests_totalmytelevision_http_request_duration_secondsmytelevision_auth_login_totalmytelevision_content_views_totalmytelevision_active_streams_totalmytelevision_payment_transactions_total
Technologies utilisees
| Categorie | Technologie | Version |
|---|---|---|
| Runtime | Node.js | 20.x |
| Framework | NestJS | 10.x |
| Langage | TypeScript | 5.3 |
| ORM | Prisma | 6.19 |
| Database | PostgreSQL | 16 |
| Cache | Redis | 7 |
| Auth | Firebase Admin SDK | 13.x |
| Storage | Cloudflare R2 | - |
| Docs | Swagger / OpenAPI | 3.0 |
| Metriques | Prometheus | prom-client |
| Container | Docker | - |
| Orchestration | Kubernetes | - |
| IaC | Terraform | >= 1.5 |
Environnements
| Environnement | Port | URL | Objectif |
|---|---|---|---|
| Production | 3050 | api.mytelevision.app | Production |
| Staging | 3051 | staging-api.mytelevision.app | QA & Tests |
| Developpement | 3052 | localhost:3052 | Dev local |
References
- Clean Architecture -- Detail des couches
- Schema Base de Donnees -- 73 modeles Prisma
- Architecture Page/Screen -- Sitemap complet
- Diagrammes -- Tous les diagrammes techniques
- NestJS Documentation
- Prisma Documentation
- Clean Architecture (Uncle Bob)