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" ) // Objet represente un element d'inventaire. type Objet struct { ent.Schema } // Fields de l'entite Objet. func (Objet) Fields() []ent.Field { return []ent.Field{ field.UUID("id", uuid.UUID{}). Default(uuid.New). Comment("Identifiant unique de l'objet"), field.String("nom"). NotEmpty(). Comment("Nom de l'objet"), field.String("description"). Optional(). Nillable(). Comment("Description libre"), field.Int("quantite"). Default(0). Comment("Quantite en stock"), field.Float("prix_achat"). Optional(). Nillable(). Comment("Prix d'achat"), field.Time("date_achat"). Optional(). Nillable(). Comment("Date d'achat"), field.String("boutique"). Optional(). Nillable(). Comment("Boutique ou fournisseur"), field.String("numero_serie"). Optional(). Nillable(). Comment("Numero de serie"), field.String("numero_modele"). Optional(). Nillable(). Comment("Numero de modele"), field.String("fabricant"). Optional(). Nillable(). Comment("Fabricant"), field.Enum("statut"). Values("en_stock", "pret", "hors_service", "archive"). Default("en_stock"). Comment("Statut de l'objet"), field.JSON("caracteristiques", map[string]any{}). Optional(). Comment("Caracteristiques personnalisees"), 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 (Objet) Annotations() []schema.Annotation { return []schema.Annotation{ entsql.Annotation{Table: "objet"}, } } // Edges de l'entite Objet. func (Objet) Edges() []ent.Edge { return []ent.Edge{ edge.To("liens_emplacements", LienObjetEmplacement.Type), edge.To("champs_personnalises", ChampPersonnalise.Type), edge.To("pieces_jointes", PieceJointe.Type), } }