package gorm_models import ( "log" "gorm.io/gorm" ) type AttributeOption struct { ID uint `gorm:"primaryKey"` AttributeID uint AdminName string } type Attribute struct { ID uint `gorm:"primaryKey"` Code string AttributeOptions []AttributeOption } type AttributeFamily struct { ID uint `gorm:"primaryKey"` Code string Groups []AttributeGroup } type AttributeGroup struct { ID uint `gorm:"primaryKey"` Name string AttributeFamilyID uint Attributes []Attribute `gorm:"many2many:attribute_group_mappings;"` } func GetFamilies(db *gorm.DB) []AttributeFamily { var families []AttributeFamily err := db.Model(&AttributeFamily{}).Preload("Groups").Order("id ASC").Find(&families).Error if err != nil { log.Println(err.Error()) } else { log.Println("famililar alyndy", len(families)) } return families } func GetGroups(db *gorm.DB) []AttributeGroup { var groups []AttributeGroup err := db.Model(&AttributeGroup{}).Preload("Family").Find(&groups).Error if err != nil { log.Println(err.Error()) } return groups } func GetAttributes(db *gorm.DB) []Attribute { var attributes []Attribute err := db.Model(&Attribute{}).Find(&attributes).Error if err != nil { log.Println(err.Error()) } return attributes } func GetAttributeOption(db *gorm.DB, attrbuteID uint, value string) AttributeOption { var option AttributeOption err := db.FirstOrCreate(&option, AttributeOption{AttributeID: attrbuteID, AdminName: value}).Error if err != nil { log.Println(err.Error()) } return option }