go_service/gorm_models/family.go

109 lines
2.3 KiB
Go

package gorm_models
import (
"errors"
"log"
"gorm.io/gorm"
)
type AttributeOption struct {
ID uint `gorm:"primaryKey"`
AttributeID uint
AdminName string
SortOrder int `sql:"DEFAULT:NULL" gorm:"default:null"`
Translations []AttributeOptionTranslation
}
type AttributeOptionTranslation struct {
ID uint `gorm:"primaryKey"`
AttributeOptionID uint
Locale string
Label 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, error) {
var families []AttributeFamily
err := db.Model(&AttributeFamily{}).Preload("Groups").Order("id ASC").Find(&families).Error
return families, err
}
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, error) {
var attributes []Attribute
err := db.Model(&Attribute{}).Find(&attributes).Error
return attributes, err
}
func GetAttributeOption(db *gorm.DB, attrbuteID uint, value string) AttributeOption {
var option AttributeOption
err := db.Where("attribute_id=? and admin_name=?", attrbuteID, value).First(&option).Error
if err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
option = AttributeOption{
AttributeID: attrbuteID,
AdminName: value,
SortOrder: 1000,
Translations: []AttributeOptionTranslation{
{Locale: "tm", Label: value},
{Locale: "ru", Label: value},
{Locale: "tr", Label: value},
},
}
if err := db.Create(&option).Error; err != nil {
log.Println(err.Error())
}
}
return option
}
func GetAttrOptions(db *gorm.DB, attrbuteID uint) ([]AttributeOption, error) {
var options []AttributeOption
err := db.Find(&options, AttributeOption{AttributeID: attrbuteID}).Error
if err != nil {
log.Println(err.Error())
}
return options, err
}