Aller au contenu principal

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

MetriqueValeur
Modules NestJS72
Controllers60
Endpoints REST587
Modeles Prisma73
Port Production3050
Port Staging3051
Port Developpement3052

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

  1. Controller recoit la requete
  2. Guard verifie l'authentification (JWT)
  3. Interceptor detecte la locale (fr_FR / en_US)
  4. Service verifie le cache Redis
  5. Si cache miss, Prisma requete PostgreSQL
  6. Resultat stocke en cache (TTL: 300s)
  7. Interceptor localise la reponse
  8. Response retournee au client

Modules Principaux

Vue d'ensemble des modules

DomaineEndpoints APIStatut
Authentication/auth, /account-authOperationnel
User Management/users, /profiles, /sessions, /devicesOperationnel
Content - Live TV/livetv, /live-eventsOperationnel
Content - VOD/movies, /seriesOperationnel
Content - Audio/radio, /podcastsOperationnel
Content - Editorial/news, /replaysOperationnel
Engagement/favorites, /watch-history, /reactions, /viewsOperationnel
Subscription/subscription-plans, /subscriptions, /payment-methodsOperationnel
Support/supportOperationnel
Streaming/streamingOperationnel
Settings/settings, /notificationsOperationnel

Auth Module

Account / Profile System


Securite

Authentification

Rate Limiting

TierLimiteFenetreCle
Short3 req1 sec(tenant_id, profile_id, tier)
Medium20 req10 sec(tenant_id, profile_id, tier)
Long100 req1 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_total
  • mytelevision_http_request_duration_seconds
  • mytelevision_auth_login_total
  • mytelevision_content_views_total
  • mytelevision_active_streams_total
  • mytelevision_payment_transactions_total

Technologies utilisees

CategorieTechnologieVersion
RuntimeNode.js20.x
FrameworkNestJS10.x
LangageTypeScript5.3
ORMPrisma6.19
DatabasePostgreSQL16
CacheRedis7
AuthFirebase Admin SDK13.x
StorageCloudflare R2-
DocsSwagger / OpenAPI3.0
MetriquesPrometheusprom-client
ContainerDocker-
OrchestrationKubernetes-
IaCTerraform>= 1.5

Environnements

EnvironnementPortURLObjectif
Production3050api.mytelevision.appProduction
Staging3051staging-api.mytelevision.appQA & Tests
Developpement3052localhost:3052Dev local

References