package gorm_models import ( "context" helper "db_service/pkg" "gorm.io/gorm" "os" "time" ) type Product struct { ID uint `gorm:"primary_key"` CreatedAt time.Time UpdatedAt time.Time Sku string Type string ParentID uint `sql:"DEFAULT:NULL"` AttributeFamilyID uint AttributeFamily AttributeFamily BrandID uint `sql:"DEFAULT:NULL"` Brand Brand Images []ProductImage Categories []Category `gorm:"many2many:product_categories;"` AttributeValues []ProductAttributeValue SuperAttributes []Attribute `gorm:"many2many:product_super_attributes;"` //Variants []*Product `gorm:"many2many:product_relations;foreignKey:child_id;primaryKey:parent_id;"` } type ProductRelation struct { ParentID uint ChildID uint } type ProductFlat struct { ID uint `gorm:"primary_key"` Sku string ProductNumber string `sql:"DEFAULT:NULL" gorm:"default:null"` Name string `sql:"DEFAULT:''" gorm:"default:''"` Weight float64 `sql:"DEFAULT:NULL" gorm:"type:decimal(12,4);default:null"` Status bool `sql:"DEFAULT:NULL" gorm:"default:null"` VisibleIndividually bool `sql:"DEFAULT:NULL" gorm:"default:null"` Price float64 `gorm:"type:decimal(12,4)"` MinPrice float64 `gorm:"type:decimal(12,4)"` MaxPrice float64 `gorm:"type:decimal(12,4)"` SpecialPrice float64 `sql:"DEFAULT:NULL" gorm:"type:decimal(12,4);default:null"` UrlKey string `sql:"DEFAULT:NULL" gorm:"default:null"` ShortDescription string `sql:"DEFAULT:NULL" gorm:"default:null"` Description string `sql:"DEFAULT:NULL" gorm:"default:null"` FavoritesCount uint `sql:"DEFAULT:NULL" gorm:"default:null;column:favoritesCount"` CreatedAt time.Time `sql:"DEFAULT:NULL" gorm:"default:null"` UpdatedAt time.Time `sql:"DEFAULT:NULL" gorm:"default:null"` ProductID uint Product Product Channel string `sql:"DEFAULT:default" gorm:"default:default"` Locale string `sql:"DEFAULT:tm" gorm:"default:tm"` ParentID uint `sql:"DEFAULT:NULL" gorm:"default:null"` Variants []ProductFlat `gorm:"foreignKey:ParentID"` Color int `sql:"DEFAULT:NULL" gorm:"default:null"` ColorLabel string `sql:"DEFAULT:NULL" gorm:"default:null"` Size int `sql:"DEFAULT:NULL" gorm:"default:null"` SizeLabel string `sql:"DEFAULT:NULL" gorm:"default:null"` Boyut int `sql:"DEFAULT:NULL" gorm:"default:null"` BoyutLabel string `sql:"DEFAULT:NULL" gorm:"default:null"` MetaTitle string `sql:"DEFAULT:NULL" gorm:"default:null"` MetaKeywords string `sql:"DEFAULT:NULL" gorm:"default:null"` BrandID uint `sql:"DEFAULT:NULL" gorm:"default:null"` Brand Brand } type ProductImage struct { ID uint `gorm:"primary_key"` Type string Path string ProductID uint } type ProductAttributeValue struct { ID uint `gorm:"primary_key"` Locale string `sql:"DEFAULT:NULL" gorm:"default:null"` Channel string `sql:"DEFAULT:NULL" gorm:"default:null"` ProductID uint AttributeID uint TextValue string `sql:"DEFAULT:NULL" gorm:"default:null"` BooleanValue bool `sql:"DEFAULT:NULL" gorm:"default:null"` IntegerValue int `sql:"DEFAULT:NULL" gorm:"default:null"` FloatValue float64 `sql:"DEFAULT:NULL" gorm:"type:decimal(12,4);default:null"` } type ProductSuperAttribute struct { ProductID uint AttributeID uint } type Tabler interface { TableName() string } // TableName overrides the table name used by User to `profiles` func (ProductFlat) TableName() string { return "product_flat" } func DeleteProducts(db *gorm.DB) error { //todo delete from elastico ctx, cancel := context.WithTimeout(context.Background(), 10*time.Minute) defer cancel() //qb := "DELETE FROM products WHERE id NOT IN (select product_id as id from wishlist) AND id NOT IN (select product_id as id from order_items) AND id NOT IN (select parent_id as idfrom order_items);" qb := "DELETE p FROM products p LEFT JOIN order_items oi ON p.id = oi.product_id LEFT JOIN order_items op ON p.id = op.parent_id WHERE oi.id IS NULL AND op.id IS NULL;" return db.WithContext(ctx).Exec(qb).Error } func Flush() error { _, err := helper.SendRequest("GET", os.Getenv("scout_flash"), nil, "") return err }