From a9d1ad79ca8c44d31ce7f20acb8eae706f93dcbf Mon Sep 17 00:00:00 2001 From: Gilles Soulier Date: Wed, 21 Jan 2026 21:20:37 +0100 Subject: [PATCH] add additional ent schemas --- backend/internal/data/ent/schema/categorie.go | 3 +- .../data/ent/schema/champ_personnalise.go | 58 ++++++++++++++++++ .../internal/data/ent/schema/emplacement.go | 3 +- .../data/ent/schema/lien_objet_emplacement.go | 53 +++++++++++++++++ backend/internal/data/ent/schema/objet.go | 7 ++- .../internal/data/ent/schema/piece_jointe.go | 59 +++++++++++++++++++ doc_dev/07_etape2_schemas_complement.md | 16 +++++ 7 files changed, 196 insertions(+), 3 deletions(-) create mode 100644 backend/internal/data/ent/schema/champ_personnalise.go create mode 100644 backend/internal/data/ent/schema/lien_objet_emplacement.go create mode 100644 backend/internal/data/ent/schema/piece_jointe.go create mode 100644 doc_dev/07_etape2_schemas_complement.md diff --git a/backend/internal/data/ent/schema/categorie.go b/backend/internal/data/ent/schema/categorie.go index b38671f..bb12cf6 100644 --- a/backend/internal/data/ent/schema/categorie.go +++ b/backend/internal/data/ent/schema/categorie.go @@ -51,6 +51,7 @@ func (Categorie) Edges() []ent.Edge { edge.To("enfants", Categorie.Type). From("parent"). Unique(). - Field("parent_id"), + Field("parent_id"). + Comment("Lien parent/enfants pour l'arbre des categories"), } } diff --git a/backend/internal/data/ent/schema/champ_personnalise.go b/backend/internal/data/ent/schema/champ_personnalise.go new file mode 100644 index 0000000..92e234e --- /dev/null +++ b/backend/internal/data/ent/schema/champ_personnalise.go @@ -0,0 +1,58 @@ +package schema + +import ( + "time" + + "entgo.io/ent" + "entgo.io/ent/schema/edge" + "entgo.io/ent/schema/field" + "github.com/google/uuid" +) + +// ChampPersonnalise represente un champ dynamique associe a un objet. +type ChampPersonnalise struct { + ent.Schema +} + +// Fields de l'entite ChampPersonnalise. +func (ChampPersonnalise) Fields() []ent.Field { + return []ent.Field{ + field.UUID("id", uuid.UUID{}). + Default(uuid.New). + Comment("Identifiant unique du champ"), + field.UUID("objet_id", uuid.UUID{}). + Comment("Identifiant de l'objet"), + field.String("nom_champ"). + NotEmpty(). + Comment("Nom du champ"), + field.Enum("type_champ"). + Values("string", "int", "bool", "date"). + Default("string"). + Comment("Type du champ"), + field.String("valeur"). + Optional(). + Nillable(). + Comment("Valeur stockee en texte"), + field.String("unite"). + Optional(). + Nillable(). + Comment("Unite (si applicable)"), + field.Time("created_at"). + Default(time.Now). + Comment("Date de creation"), + field.Time("updated_at"). + Default(time.Now). + UpdateDefault(time.Now). + Comment("Date de derniere mise a jour"), + } +} + +// Edges de l'entite ChampPersonnalise. +func (ChampPersonnalise) Edges() []ent.Edge { + return []ent.Edge{ + edge.From("objet", Objet.Type). + Ref("champs_personnalises"). + Unique(). + Field("objet_id"), + } +} diff --git a/backend/internal/data/ent/schema/emplacement.go b/backend/internal/data/ent/schema/emplacement.go index 50c740c..0ab959d 100644 --- a/backend/internal/data/ent/schema/emplacement.go +++ b/backend/internal/data/ent/schema/emplacement.go @@ -63,6 +63,7 @@ func (Emplacement) Edges() []ent.Edge { edge.To("enfants", Emplacement.Type). From("parent"). Unique(). - Field("parent_id"), + Field("parent_id"). + Comment("Lien parent/enfants pour l'arbre des emplacements"), } } diff --git a/backend/internal/data/ent/schema/lien_objet_emplacement.go b/backend/internal/data/ent/schema/lien_objet_emplacement.go new file mode 100644 index 0000000..b40e770 --- /dev/null +++ b/backend/internal/data/ent/schema/lien_objet_emplacement.go @@ -0,0 +1,53 @@ +package schema + +import ( + "time" + + "entgo.io/ent" + "entgo.io/ent/schema/edge" + "entgo.io/ent/schema/field" + "github.com/google/uuid" +) + +// LienObjetEmplacement represente un lien entre un objet et un emplacement. +type LienObjetEmplacement struct { + ent.Schema +} + +// Fields de l'entite LienObjetEmplacement. +func (LienObjetEmplacement) Fields() []ent.Field { + return []ent.Field{ + field.UUID("id", uuid.UUID{}). + Default(uuid.New). + Comment("Identifiant unique du lien"), + field.UUID("objet_id", uuid.UUID{}). + Comment("Identifiant de l'objet"), + field.UUID("emplacement_id", uuid.UUID{}). + Comment("Identifiant de l'emplacement"), + field.Enum("type"). + Values("stocke", "utilise_dans"). + Default("stocke"). + Comment("Type de relation"), + field.Time("created_at"). + Default(time.Now). + Comment("Date de creation"), + field.Time("updated_at"). + Default(time.Now). + UpdateDefault(time.Now). + Comment("Date de derniere mise a jour"), + } +} + +// Edges de l'entite LienObjetEmplacement. +func (LienObjetEmplacement) Edges() []ent.Edge { + return []ent.Edge{ + edge.From("objet", Objet.Type). + Ref("liens_emplacements"). + Unique(). + Field("objet_id"), + edge.From("emplacement", Emplacement.Type). + Ref("liens_objets"). + Unique(). + Field("emplacement_id"), + } +} diff --git a/backend/internal/data/ent/schema/objet.go b/backend/internal/data/ent/schema/objet.go index 3610f3d..e1a266c 100644 --- a/backend/internal/data/ent/schema/objet.go +++ b/backend/internal/data/ent/schema/objet.go @@ -4,6 +4,7 @@ import ( "time" "entgo.io/ent" + "entgo.io/ent/schema/edge" "entgo.io/ent/schema/field" "github.com/google/uuid" ) @@ -73,5 +74,9 @@ func (Objet) Fields() []ent.Field { // Edges de l'entite Objet. func (Objet) Edges() []ent.Edge { - return nil + return []ent.Edge{ + edge.To("liens_emplacements", LienObjetEmplacement.Type), + edge.To("champs_personnalises", ChampPersonnalise.Type), + edge.To("pieces_jointes", PieceJointe.Type), + } } diff --git a/backend/internal/data/ent/schema/piece_jointe.go b/backend/internal/data/ent/schema/piece_jointe.go new file mode 100644 index 0000000..cfb7b1c --- /dev/null +++ b/backend/internal/data/ent/schema/piece_jointe.go @@ -0,0 +1,59 @@ +package schema + +import ( + "time" + + "entgo.io/ent" + "entgo.io/ent/schema/edge" + "entgo.io/ent/schema/field" + "github.com/google/uuid" +) + +// PieceJointe represente un fichier associe a un objet. +type PieceJointe struct { + ent.Schema +} + +// Fields de l'entite PieceJointe. +func (PieceJointe) Fields() []ent.Field { + return []ent.Field{ + field.UUID("id", uuid.UUID{}). + Default(uuid.New). + Comment("Identifiant unique de la piece jointe"), + field.UUID("objet_id", uuid.UUID{}). + Comment("Identifiant de l'objet"), + field.String("nom_fichier"). + NotEmpty(). + Comment("Nom du fichier"), + field.String("chemin"). + NotEmpty(). + Comment("Chemin de stockage"), + field.String("type_mime"). + NotEmpty(). + Comment("Type MIME"), + field.Bool("est_principale"). + Default(false). + Comment("Piece jointe principale"), + field.Enum("categorie"). + Values("image", "pdf_notice", "markdown_tuto"). + Default("image"). + Comment("Categorie de la piece jointe"), + field.Time("created_at"). + Default(time.Now). + Comment("Date de creation"), + field.Time("updated_at"). + Default(time.Now). + UpdateDefault(time.Now). + Comment("Date de derniere mise a jour"), + } +} + +// Edges de l'entite PieceJointe. +func (PieceJointe) Edges() []ent.Edge { + return []ent.Edge{ + edge.From("objet", Objet.Type). + Ref("pieces_jointes"). + Unique(). + Field("objet_id"), + } +} diff --git a/doc_dev/07_etape2_schemas_complement.md b/doc_dev/07_etape2_schemas_complement.md new file mode 100644 index 0000000..37fcdf7 --- /dev/null +++ b/doc_dev/07_etape2_schemas_complement.md @@ -0,0 +1,16 @@ +# Etape 2 (suite) - Schemas Ent complementaires + +## Objectif +Ajouter les schemas Ent pour les tables complementaires du MVP. + +## Fichiers ajoutes +- `backend/internal/data/ent/schema/lien_objet_emplacement.go` +- `backend/internal/data/ent/schema/champ_personnalise.go` +- `backend/internal/data/ent/schema/piece_jointe.go` + +## Ajustements +- Edges ajoutes dans `Objet` pour lier les relations. +- Commentaires en francais pour les champs et edges. + +## Prochaine etape +- Generer le code Ent et migrations initiales.