# Backend - RoadWave

Backend Go de l'application RoadWave.

## Structure

```
backend/
├── cmd/                    # Points d'entrée de l'application
│   └── api/                # Serveur API REST
├── internal/               # Code interne (non exportable)
│   ├── 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
├── pkg/                    # Code exportable (bibliothèques réutilisables)
├── migrations/             # Migrations SQL
├── tests/
│   └── bdd/                # Step definitions pour tests Gherkin
├── config/                 # Fichiers de configuration (dev, staging, prod)
├── go.mod                  # Dépendances Go
├── sqlc.yaml               # Configuration SQLC
├── .air.toml               # Configuration Air (hot reload)
├── Dockerfile              # Image production
└── Dockerfile.dev          # Image développement
```

## Architecture

Voir [ADR-012 : Architecture Backend](../docs/adr/012-architecture-backend.md) pour les détails de l'architecture modulaire.

## Commandes

Depuis la **racine du monorepo** :

```bash
# Développement
make dev              # Démarrer avec hot reload
make docker-up        # Lancer tous les services Docker

# Tests
make test             # Lancer tous les tests
make test-unit        # Tests unitaires uniquement
make test-bdd         # Tests BDD Gherkin

# Migrations
make migrate-up       # Appliquer les migrations
make migrate-down     # Rollback dernière migration
make migrate-create name=add_users  # Créer nouvelle migration

# Build
make build            # Compiler le binaire production
make lint             # Linter le code
make format           # Formatter le code
```

## Configuration

1. Copier `.env.example` en `.env` :
   ```bash
   cp backend/.env.example backend/.env
   ```

2. Ajuster les variables d'environnement si nécessaire

## Dépendances

- **Go** : 1.21+
- **PostgreSQL** : 16+ avec PostGIS
- **Redis** : 7+
- **Zitadel** : dernière version

Toutes les dépendances sont gérées via Docker Compose (voir `docker-compose.yml` à la racine).
