package schema import ( "time" "entgo.io/ent" "entgo.io/ent/dialect/entsql" "entgo.io/ent/schema" "entgo.io/ent/schema/edge" "entgo.io/ent/schema/field" "github.com/google/uuid" ) // Emplacement represente un noeud de l'arbre des emplacements. type Emplacement struct { ent.Schema } // Fields de l'entite Emplacement. func (Emplacement) Fields() []ent.Field { return []ent.Field{ field.UUID("id", uuid.UUID{}). Default(uuid.New). Comment("Identifiant unique de l'emplacement"), field.String("nom"). NotEmpty(). Comment("Nom de l'emplacement"), field.UUID("parent_id", uuid.UUID{}). Optional(). Nillable(). Comment("Identifiant du parent"), field.String("slug"). Optional(). Nillable(). Comment("Slug URL-friendly"), field.String("piece"). Optional(). Nillable(). Comment("Piece associee"), field.String("meuble"). Optional(). Nillable(). Comment("Meuble associe"), field.String("numero_boite"). Optional(). Nillable(). Comment("Numero de boite"), field.String("icone"). Optional(). Nillable(). Comment("Nom ou code d'icone"), 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"), } } // Annotations pour le nom de table. func (Emplacement) Annotations() []schema.Annotation { return []schema.Annotation{ entsql.Annotation{Table: "emplacement"}, } } // Edges de l'entite Emplacement. func (Emplacement) Edges() []ent.Edge { return []ent.Edge{ edge.To("enfants", Emplacement.Type). From("parent"). Unique(). Field("parent_id"). Comment("Lien parent/enfants pour l'arbre des emplacements"), edge.To("liens_objets", LienObjetEmplacement.Type). Comment("Liens entre emplacements et objets"), } }