77 lines
2.8 KiB
Markdown
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
|
|
```
|