# ADR-010 : Architecture Backend

**Statut** : Accepté
**Date** : 2025-01-20

## Contexte

RoadWave nécessite une architecture backend évolutive tout en gardant la simplicité opérationnelle pour un MVP. Le système doit supporter une croissance progressive de 0 à 10M utilisateurs.

## Décision

**Monolithe modulaire** avec séparation claire en modules internes.

## Alternatives considérées

| Architecture | Complexité | Coûts infra | Time to market | Évolutivité |
|--------------|------------|-------------|----------------|-------------|
| **Monolithe modulaire** | Faible | Faible | Rapide | 0-1M users |
| Microservices | Élevée | Élevée | Lent | 1M+ users |
| Hybrid (Mono + Workers) | Moyenne | Moyenne | Moyen | 100K-5M users |

## Justification

- **Simplicité** : 1 seul binaire Go, déploiement trivial
- **Transactions** : Communications inter-modules en mémoire (pas de latence réseau)
- **Debugging** : Stack traces complètes, profiling unifié
- **Coûts** : 1 serveur suffit pour 100K users (vs N services)
- **Refactoring** : Modules internes bien séparés facilitent migration vers microservices si nécessaire

## Structure modulaire

```
internal/
├── auth/         # Validation JWT, intégration Zitadel
├── user/         # Profils, centres d'intérêt
├── content/      # CRUD contenus, métadonnées
├── geo/          # Recherche géospatiale, algorithme
├── streaming/    # Génération HLS, transcoding
├── moderation/   # Signalements, workflow
├── payment/      # Intégration Mangopay
└── analytics/    # Métriques écoute, jauges
```

Chaque module suit : `handler.go` → `service.go` → `repository.go`.

## Conséquences

- Scaling horizontal : réplication complète du binaire (acceptable jusqu'à 1M users)
- Transition vers microservices possible en phase 2 (extraction progressive des modules)
- Importance de maintenir découplage fort entre modules (interfaces claires)
