2.8 KiB
2.8 KiB
PdfEditor — Backend (Go)
API REST du projet PdfEditor. Implémente le contrat décrit dans ../docs/API.md.
Stack
- Go 1.23, routeur chi
- PostgreSQL via pgx (pgxpool)
- JWT golang-jwt, bcrypt pour les mots de passe
- Migrations embarquées appliquées au démarrage via 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.
# 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
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.
# 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