From 19ec9f3c17a0ccec9e92b13a7f51c4c4627d4fed Mon Sep 17 00:00:00 2001 From: Gilles Soulier Date: Wed, 21 Jan 2026 21:10:45 +0100 Subject: [PATCH] init backend and dev docs --- .gitignore | 8 ++++++++ backend/cmd/app/main.go | 25 +++++++++++++++++++++++++ backend/go.mod | 5 +++++ doc_dev/01_analyse.md | 28 ++++++++++++++++++++++++++++ doc_dev/02_brainstorm.md | 23 +++++++++++++++++++++++ doc_dev/03_plan_dev.md | 23 +++++++++++++++++++++++ doc_dev/04_etape1_setup.md | 15 +++++++++++++++ 7 files changed, 127 insertions(+) create mode 100644 .gitignore create mode 100644 backend/cmd/app/main.go create mode 100644 backend/go.mod create mode 100644 doc_dev/01_analyse.md create mode 100644 doc_dev/02_brainstorm.md create mode 100644 doc_dev/03_plan_dev.md create mode 100644 doc_dev/04_etape1_setup.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ca4a4e9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +# Secrets +.env +/doc_dev/.env + +# Go build +/bin/ +*.exe +*.out diff --git a/backend/cmd/app/main.go b/backend/cmd/app/main.go new file mode 100644 index 0000000..68dd5a0 --- /dev/null +++ b/backend/cmd/app/main.go @@ -0,0 +1,25 @@ +package main + +import ( + "net/http" + "os" + + "github.com/gin-gonic/gin" +) + +func main() { + // Config simple : port via PORT, defaut 8080. + port := os.Getenv("PORT") + if port == "" { + port = "8080" + } + + r := gin.Default() + + // Route de sante pour verifier que le backend repond. + r.GET("/healthz", func(c *gin.Context) { + c.JSON(http.StatusOK, gin.H{"status": "ok"}) + }) + + _ = r.Run(":" + port) +} diff --git a/backend/go.mod b/backend/go.mod new file mode 100644 index 0000000..a89c797 --- /dev/null +++ b/backend/go.mod @@ -0,0 +1,5 @@ +module gitea.maison43.duckdns.org/gilles/matosbox + +go 1.23 + +require github.com/gin-gonic/gin v1.10.0 diff --git a/doc_dev/01_analyse.md b/doc_dev/01_analyse.md new file mode 100644 index 0000000..abc311e --- /dev/null +++ b/doc_dev/01_analyse.md @@ -0,0 +1,28 @@ +# Analyse - MatosBox + +## Contexte +MatosBox est une application open-source self-hosted pour inventorier du materiel (electronique, informatique, outillage, cuisine). L'app vise ~5000 objets, avec simplicite, portabilite et extensibilite. + +## Contraintes et consignes +- Langue : interface, messages et commentaires de code en francais. Noms des tables en francais. +- Backend : Go 1.23+, Gin, Ent, SQLite par defaut, Postgres optionnel. +- API : REST, endpoint upload multiple `/v1/objets/{id}/pieces_jointes`. +- Pieces jointes : images, PDF, Markdown. +- Schema : tables Objet, Categorie, Emplacement (noms FR), relations hierarchiques. +- Depot : gitea.maison43.duckdns.org/gilles/matosbox.git. Commit/push apres etapes clefs (token non fourni). +- Dossiers : `backend/`, `frontend/`, `data/`, `docs/`, `migrations/`. + +## Fonctions coeur (MVP) +- CRUD Objets, Categories, Emplacements. +- Pieces jointes multiples par objet. +- Recherche et filtres de base. + +## Risques / points d'attention +- Definition precise des schemas Ent en francais (noms et relations). +- Gestion multi-fichiers (taille, types MIME, stockage disque). +- Migration SQLite <-> Postgres. + +## Livrables demandes +- Brainstorming et plan de dev. +- Fichiers intermediaires par etapes dans `doc_dev/`. +- Debut du developpement (progressif, par etapes). diff --git a/doc_dev/02_brainstorm.md b/doc_dev/02_brainstorm.md new file mode 100644 index 0000000..9e8d6ed --- /dev/null +++ b/doc_dev/02_brainstorm.md @@ -0,0 +1,23 @@ +# Brainstorming - MatosBox + +## Axes produit +- Inventaire polyvalent : objets, categories, emplacements, tags. +- Experiences cle : ajout rapide, upload pieces jointes, recherche simple. +- Extensibilite : champs personalises, import CSV/JSON, scan hardware. + +## Idees pour le MVP +- Formulaire objet minimal : nom, quantite, categorie, emplacement, statut. +- Widget pieces jointes : multi-upload + previsualisation. +- Liste objets avec filtres rapides (statut, categorie, emplacement). + +## Questions a clarifier +- Chemin exact des pieces jointes (structure de dossiers par objet ou date). +- Limites d'upload par defaut (taille/fichier, total). +- Gestion des miniatures (server-side ou front). + +## Sequencage propose +1. Initialisation structure repo + config. +2. Schema Ent (Objet, Categorie, Emplacement). +3. API CRUD basique. +4. Upload pieces jointes. +5. Frontend minimum. diff --git a/doc_dev/03_plan_dev.md b/doc_dev/03_plan_dev.md new file mode 100644 index 0000000..98b2f42 --- /dev/null +++ b/doc_dev/03_plan_dev.md @@ -0,0 +1,23 @@ +# Plan de dev (court terme) + +## Etape 1 - Setup et base technique +- Creer structure repo (backend/frontend/docs/data/migrations). +- Init module Go, dependances Gin. +- Point d'entree backend avec route de sante. + +## Etape 2 - Schema Ent (FR) +- Tables : Objet, Categorie, Emplacement. +- Relations hierarchiques pour Categorie et Emplacement. +- Champs principaux Objet (nom, description, quantite, prix_achat, etc.). + +## Etape 3 - API CRUD +- Endpoints CRUD Objets, Categories, Emplacements. +- Validation d'entree et reponses JSON coherentes. + +## Etape 4 - Pieces jointes +- Endpoint POST /v1/objets/{id}/pieces_jointes (upload multiple). +- Stockage disque + enregistrement DB (PieceJointe). + +## Etape 5 - Tests minimum +- Tests unitaires modeles et handlers critiques. +- Tests upload multi-fichiers. diff --git a/doc_dev/04_etape1_setup.md b/doc_dev/04_etape1_setup.md new file mode 100644 index 0000000..c6a1c44 --- /dev/null +++ b/doc_dev/04_etape1_setup.md @@ -0,0 +1,15 @@ +# Etape 1 - Setup initial (realise) + +## Objectif +Mettre en place la structure minimale et un point d'entree backend. + +## Fichiers ajoutes +- `backend/go.mod` : module Go + dependance Gin. +- `backend/cmd/app/main.go` : serveur Gin minimal + route `/healthz`. +- `doc_dev/01_analyse.md` : synthese des consignes. +- `doc_dev/02_brainstorm.md` : idees MVP et questions. +- `doc_dev/03_plan_dev.md` : plan court terme. + +## Notes +- Aucune migration/Ent encore : prochaine etape. +- Token de commit non fourni, donc pas de commit/push.