feat: v1
This commit is contained in:
99
frontend/README.md
Normal file
99
frontend/README.md
Normal file
@ -0,0 +1,99 @@
|
||||
# PdfEditor — Frontend (Angular)
|
||||
|
||||
Application web d'édition de PDF auto-hébergée. Frontend Angular (standalone
|
||||
components, routing, lazy-loading) consommant l'API REST décrite dans
|
||||
`../docs/API.md`. L'API est toujours appelée en chemin **relatif** `/api/...`,
|
||||
afin que le proxy nginx (prod) comme le proxy Angular (dev) fonctionnent sans
|
||||
configuration d'URL.
|
||||
|
||||
## Prérequis
|
||||
|
||||
- Node.js 20+ (testé avec Node 22/24) et npm.
|
||||
- Angular CLI (`npm install -g @angular/cli`) ou via `npx ng`.
|
||||
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
npm install
|
||||
```
|
||||
|
||||
> Le fichier `package-lock.json` n'est pas fourni : il sera généré au premier
|
||||
> `npm install`. Pensez à le commiter ensuite (le Dockerfile l'utilise via
|
||||
> `npm ci` s'il est présent).
|
||||
|
||||
## Développement local (`ng serve` + proxy)
|
||||
|
||||
Le backend est exposé en local sur `http://localhost:8081` par
|
||||
`../docker-compose.local.yml`. Le fichier `proxy.conf.json` redirige `/api`
|
||||
vers ce port.
|
||||
|
||||
1. Démarrer la base + le backend :
|
||||
|
||||
```bash
|
||||
# à la racine du dépôt
|
||||
docker compose -f docker-compose.local.yml up --build db backend
|
||||
```
|
||||
|
||||
2. Lancer le serveur de dev Angular (utilise automatiquement le proxy) :
|
||||
|
||||
```bash
|
||||
npm start
|
||||
# équivaut à : ng serve --proxy-config proxy.conf.json
|
||||
```
|
||||
|
||||
3. Ouvrir http://localhost:4200.
|
||||
|
||||
## Build de production
|
||||
|
||||
```bash
|
||||
npm run build
|
||||
# Sortie : dist/pdfeditor-frontend/browser
|
||||
```
|
||||
|
||||
## Docker
|
||||
|
||||
`Dockerfile` (multi-stage : build Angular puis service nginx) et `nginx.conf`
|
||||
(SPA + proxy `/api` -> `http://backend:8080`) sont prévus pour
|
||||
`../docker-compose.yml` et `../docker-compose.local.yml` (service `frontend`,
|
||||
exposé sur le port 80 de l'image).
|
||||
|
||||
```bash
|
||||
# build local de l'image (depuis le dossier frontend)
|
||||
docker build -t pdfeditor-frontend .
|
||||
```
|
||||
|
||||
## Architecture
|
||||
|
||||
```
|
||||
src/app/
|
||||
├── core/ # services transverses
|
||||
│ ├── auth.service.ts # login/register/refresh/logout + état utilisateur
|
||||
│ ├── auth.interceptor.ts # Bearer + refresh automatique sur 401
|
||||
│ ├── auth.guard.ts # garde des routes protégées
|
||||
│ ├── documents.service.ts # CRUD /api/documents
|
||||
│ └── models.ts # types alignés sur le contrat d'API
|
||||
└── features/
|
||||
├── auth/ # pages login + register
|
||||
├── dashboard/ # liste des documents sauvegardés
|
||||
└── editor/ # éditeur PDF (cœur du produit)
|
||||
├── editor.component.* # orchestration (drag&drop, toolbar, export)
|
||||
├── page-layer.component.ts # rendu d'une page + couche d'annotations
|
||||
├── pdf.service.ts # rendu pdf.js + export pdf-lib
|
||||
├── signature-dialog.component.ts
|
||||
└── annotation.model.ts
|
||||
```
|
||||
|
||||
## Librairies clés
|
||||
|
||||
- **pdfjs-dist** : rendu des pages PDF dans un `<canvas>` (navigation, zoom).
|
||||
- **pdf-lib** : aplatissement des annotations dans le PDF à l'export.
|
||||
- **signature_pad** : capture de la signature à main levée.
|
||||
- Couche d'annotations : **DOM/CSS maison** (pas de fabric/konva) — éléments
|
||||
simples, édition de texte et rendu d'images natifs, dépendance évitée.
|
||||
|
||||
## Authentification
|
||||
|
||||
- `access_token` conservé **en mémoire** (perdu au rechargement, restauré par
|
||||
un refresh) ; `refresh_token` persisté dans `localStorage`.
|
||||
- L'intercepteur ajoute le Bearer et, sur `401`, tente un `/api/auth/refresh`
|
||||
unique (les requêtes concurrentes attendent puis sont rejouées).
|
||||
Reference in New Issue
Block a user