# PdfEditor — Backend (Go) API REST du projet PdfEditor. Implémente le contrat décrit dans `../docs/API.md`. ## Stack - Go 1.23, routeur [chi](https://github.com/go-chi/chi) - PostgreSQL via [pgx](https://github.com/jackc/pgx) (pgxpool) - JWT [golang-jwt](https://github.com/golang-jwt/jwt), bcrypt pour les mots de passe - Migrations embarquées appliquées au démarrage via [goose](https://github.com/pressly/goose) - Stockage des PDF sur disque (un fichier par document, nom = UUID) ## Variables d'environnement | Variable | Obligatoire | Défaut | Description | |-------------------|-------------|--------------------|-----------------------------------------------| | `DATABASE_URL` | oui | — | DSN PostgreSQL (`postgres://...`) | | `JWT_SECRET` | oui | — | Secret de signature des JWT | | `JWT_ACCESS_TTL` | non | `15m` | Durée de vie des access tokens | | `JWT_REFRESH_TTL` | non | `168h` | Durée de vie des refresh tokens | | `STORAGE_PATH` | non | `/data/documents` | Dossier d'écriture des PDF | | `PORT` | non | `8080` | Port d'écoute HTTP | | `CORS_ORIGIN` | non | `*` | Origine autorisée pour le CORS | ## Lancer en natif Prérequis : Go 1.23+ et une base PostgreSQL accessible. ```sh # Récupérer / verrouiller les dépendances go mod tidy # Variables d'environnement (exemple dev) export DATABASE_URL="postgres://pdfeditor:changeme@localhost:5432/pdfeditor?sslmode=disable" export JWT_SECRET="dev-secret-not-for-prod" export STORAGE_PATH="./data/documents" export PORT="8081" export CORS_ORIGIN="http://localhost:4200" # Démarrer (les migrations s'appliquent automatiquement) go run ./cmd/server ``` ## Vérifications ```sh go build ./... go vet ./... ``` ## Docker Le `Dockerfile` produit une image distroless avec un binaire statique. L'orchestration se fait via les fichiers `docker-compose.yml` (prod) et `docker-compose.local.yml` (dev) à la racine du dépôt. ```sh # Depuis la racine du dépôt docker compose -f docker-compose.local.yml up --build ``` ## Arborescence ``` backend/ ├── cmd/server/main.go # point d'entrée ├── internal/ │ ├── auth/ # JWT, bcrypt, refresh tokens │ ├── config/ # chargement de la config │ ├── db/ # pool pgx + migrations │ ├── handlers/ # routeur + handlers HTTP │ └── storage/ # stockage des PDF sur disque ├── migrations/ # SQL embarqué (goose) ├── Dockerfile ├── go.mod / go.sum └── README.md ```