# PdfEditor

Éditeur de PDF en ligne, auto-hébergé. L'utilisateur dépose un PDF (glisser-déposer),
l'édite directement dans le navigateur — **ajout de texte, d'images, de signatures,
de formes basiques et de liens** — puis le télécharge ou le sauvegarde sur son compte.

## Architecture

| Couche | Techno | Rôle |
|--------|--------|------|
| **Frontend** | Angular + [PDF.js](https://mozilla.github.io/pdf.js/) (rendu) + [pdf-lib](https://pdf-lib.js.org/) (édition/export) | Toute l'édition se fait **côté client**, dans le navigateur. |
| **Backend** | Go (`net/http` + `chi`) | Authentification (JWT) et persistance des PDF/projets de l'utilisateur. |
| **Base de données** | PostgreSQL | Comptes utilisateurs et métadonnées des documents. |
| **Stockage fichiers** | Volume disque | Les PDF sauvegardés sont écrits sur un volume monté. |

Le PDF n'est envoyé au serveur **que** si l'utilisateur choisit de le sauvegarder.
L'édition elle-même ne quitte jamais le navigateur.

Le contrat d'API partagé est décrit dans [`docs/API.md`](docs/API.md).

```
PdfEditor/
├── docker-compose.yml         # Production : tire les images du registre Gitea
├── docker-compose.local.yml   # Dev/debug : build à partir des sources locales
├── .env.example               # Variables d'environnement (copier en .env)
├── scripts/push-images.sh     # Build + push des images vers Gitea (gitignoré)
├── docs/API.md                # Contrat d'API REST
├── backend/                   # Service Go
└── frontend/                  # Application Angular (servie par nginx)
```

## Développement local

Prérequis : Docker + Docker Compose.

```bash
cp .env.example .env        # adapter si besoin
docker compose -f docker-compose.local.yml up --build
```

Services exposés :
- Frontend : http://localhost:8080
- Backend (debug) : http://localhost:8081
- PostgreSQL : localhost:5432

> Pour un cycle de dev plus rapide sur une seule couche, voir les README de
> `backend/` et `frontend/` (lancement natif `go run` / `ng serve`).

## Déploiement (production)

Les deux images (`pdfeditor-backend`, `pdfeditor-frontend`) sont publiées sur le
registre OCI intégré de Gitea, puis tirées par `docker-compose.yml`.

### 1. Publier les images

```bash
./scripts/push-images.sh            # tag = git short SHA + latest
# ou
IMAGE_TAG=v1.0.0 ./scripts/push-images.sh
```

Le script construit `backend/` et `frontend/`, les tague
(`<short-sha>` + `latest`) et les pousse vers
`gitea.anthonybouteiller.ovh/blomios/pdfeditor-{backend,frontend}`.

### 2. Lancer sur le serveur

```bash
cp .env.example .env        # renseigner les secrets (JWT_SECRET, mots de passe…)
docker compose pull
docker compose up -d
```

Le frontend est exposé sur le port défini par `HTTP_PORT` (défaut `8080`) ; il
proxifie les appels `/api` vers le backend.

## Images Docker

| Image | Description |
|-------|-------------|
| `…/pdfeditor-backend` | Binaire Go (build multi-stage). |
| `…/pdfeditor-frontend`| Build Angular servi par nginx, proxy `/api` → backend. |

Tags : `latest` (dernier build) et le **git short SHA** de chaque build.
