feat: v1
This commit is contained in:
76
backend/README.md
Normal file
76
backend/README.md
Normal file
@ -0,0 +1,76 @@
|
||||
# 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
|
||||
```
|
||||
Reference in New Issue
Block a user