backend api, swagger, tooling, frontend skeleton

This commit is contained in:
2026-01-21 22:05:02 +01:00
parent a9d1ad79ca
commit 88624f3bed
107 changed files with 34393 additions and 6 deletions

View File

@@ -0,0 +1,12 @@
# Etape 3 - Migrations initiales
## Objectif
Ajouter une migration SQL initiale pour SQLite selon les schemas Ent.
## Fichiers ajoutes
- `migrations/0001_init.sql`
## Notes
- Ent generate non execute (commande `go` indisponible dans l'environnement).
- A relancer une fois Go installe :
`go run -mod=mod entgo.io/ent/cmd/ent generate ./internal/data/ent/schema --target ./internal/data/ent`

View File

@@ -0,0 +1,17 @@
# Etape 4 - Handlers CRUD (base)
## Objectif
Ajouter les handlers CRUD pour Objets, Categories, Emplacements.
## Fichiers ajoutes
- `backend/internal/handlers/handler.go`
- `backend/internal/handlers/router.go`
- `backend/internal/handlers/helpers.go`
- `backend/internal/handlers/objets.go`
- `backend/internal/handlers/categories.go`
- `backend/internal/handlers/emplacements.go`
## Notes
- Routes REST sous `/v1`.
- Validation minimale (nom obligatoire, UUID).
- Parsing des dates au format RFC3339.

View File

@@ -0,0 +1,18 @@
# Etape 5 - Upload pieces jointes
## Objectif
Ajouter l'endpoint d'upload multiple pour les pieces jointes des objets.
## Endpoint
- `POST /v1/objets/:id/pieces_jointes`
- Champ multipart : `fichiers`
## Comportement
- Verifie l'existence de l'objet.
- Enregistre les fichiers dans `ATTACHMENTS_DIR` (defaut `./data/pieces_jointes`).
- Cree les entrees `PieceJointe` associees.
- Retourne la liste des pieces jointes creees.
## Notes
- Categorie deduite par extension/MIME.
- Premiere piece jointe marquee comme principale.

View File

@@ -0,0 +1,14 @@
# Etape 3 - Generation Ent
## Objectif
Generer le code Ent a partir des schemas.
## Commande utilisee
```
env GOPATH=/tmp/go GOMODCACHE=/tmp/go/pkg/mod GOCACHE=/tmp/go/cache go run -mod=mod entgo.io/ent/cmd/ent generate ./internal/data/ent/schema --target ./internal/data/ent
```
## Notes
- Mise a jour de Ent vers v0.14.5 pour compatibilite.
- Ajout d'un `doc.go` pour initialiser le package cible.
- Generation reussie apres correction des edges obligatoires.

View File

@@ -0,0 +1,12 @@
# Etape 5 (suite) - Pieces jointes CRUD
## Objectif
Ajouter des endpoints de lecture et suppression des pieces jointes.
## Endpoints
- `GET /v1/objets/:id/pieces_jointes` : liste des pieces jointes d'un objet.
- `DELETE /v1/pieces_jointes/:id` : suppression d'une piece jointe + fichier.
## Comportement
- Retourne 404 si la piece jointe n'existe pas.
- Le fichier est supprime du disque si present.

View File

@@ -0,0 +1,14 @@
# Etape 6 - Validations upload
## Objectif
Renforcer la validation des pieces jointes.
## Ajouts
- Taille max par fichier via `MAX_UPLOAD_MB` (defaut 50).
- Types acceptes : images, PDF, Markdown.
- Refus avec code 413 si taille depassee.
- Refus avec code 400 si type non supporte.
## Comportement principale
- Une seule piece jointe principale par objet.
- La premiere piece upload est principale uniquement si aucune n'existe deja.

View File

@@ -0,0 +1,15 @@
# Etape 7 - Champs personnalises et liens emplacements
## Objectif
Ajouter les endpoints CRUD pour les champs personnalises et les liens objet/emplacement.
## Champs personnalises
- `GET /v1/objets/:id/champs_personnalises`
- `POST /v1/objets/:id/champs_personnalises`
- `PUT /v1/champs_personnalises/:id`
- `DELETE /v1/champs_personnalises/:id`
## Liens objet/emplacement
- `GET /v1/objets/:id/liens_emplacements`
- `POST /v1/objets/:id/liens_emplacements`
- `DELETE /v1/liens_emplacements/:id`

View File

@@ -0,0 +1,15 @@
# Etape 8 - Principale, dedup, tests
## Piece jointe principale
- `PUT /v1/pieces_jointes/:id/principale`
- Assure qu'une seule piece jointe est principale par objet (transaction).
## Dedup liens objet/emplacement
- Refus si lien identique (objet, emplacement, type) existe deja.
- Retour 409 avec message explicite.
## Tests
- Ajout de tests unitaires simples pour :
- types d'upload autorises
- taille max par fichier
- parsing type_champ et type lien

View File

@@ -0,0 +1,11 @@
# Etape 9 - Pagination et liens
## Pagination
- Ajout de `page` et `limit` sur les listes : objets, categories, emplacements,
pieces jointes, champs personnalises, liens.
- Defaut : 50 elements, max 200.
## Liens objet/emplacement
- Verification d'existence de l'emplacement avant creation.
- Endpoint `PUT /v1/liens_emplacements/:id` pour modifier le type.
- Deduplication maintenue sur (objet, emplacement, type).

View File

@@ -0,0 +1,11 @@
# Etape 10 - Liens + pagination avec meta
## Liens objet/emplacement
- `PUT /v1/liens_emplacements/:id` accepte `emplacement_id` et `type`.
- Verification de l'existence de l'emplacement avant mise a jour.
- Deduplication maintenue (objet, emplacement, type).
## Pagination avec meta
- Les listes renvoient maintenant :
- `items`
- `meta.total`, `meta.page`, `meta.limit`

View File

@@ -0,0 +1,14 @@
# Etape 11 - Swagger
## Objectif
Ajouter la documentation Swagger via Swaggo.
## Ajouts
- Route Swagger : `GET /swagger/*any`.
- Commentaires Swaggo dans `cmd/app/main.go`.
- Generation des fichiers : `backend/docs/swagger.json` et `backend/docs/swagger.yaml`.
## Commande de generation
```
/tmp/go/bin/swag init -g cmd/app/main.go -o docs
```

View File

@@ -0,0 +1,14 @@
# Etape 12 - Swagger auto
## Objectif
Documenter les endpoints avec Swaggo et fournir une commande d'auto-generation.
## Annotations
- Ajout des annotations Swagger sur les handlers principaux.
## Script
- `backend/scripts/gen_swagger.sh`
- Usage :
```
bash backend/scripts/gen_swagger.sh
```

View File

@@ -0,0 +1,6 @@
# Etape 13 - Tooling et env
## Ajouts
- `Taskfile.yml` + `backend/Taskfile.yml` pour run/test/ent/swagger.
- `.env.example` pour variables backend.
- `docker-compose.yml` (backend + postgres optionnel).

View File

@@ -0,0 +1,15 @@
# Etape 14 - Frontend (squelette)
## Structure
- Nuxt 3 minimal avec pages :
- `/` (accueil)
- `/objets`
- `/objets/[id]`
- `/emplacements`
## Fichiers
- `frontend/package.json`
- `frontend/nuxt.config.ts`
- `frontend/app.vue`
- `frontend/pages/*`
- `frontend/assets/css/main.css`