Files
PdfEditor/backend/README.md
2026-08-17 19:08:20 +02:00

77 lines
2.8 KiB
Markdown

# 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
```