2023-05-03 08:07:34 +00:00
package bagisto_models
import (
"context"
"gorm.io/gorm"
"log"
"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
Cinsiyet int ` sql:"DEFAULT:NULL" gorm:"default:null" `
CinsiyetLabel string ` sql:"DEFAULT:NULL" gorm:"default:null" `
}
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 " +
"LEFT JOIN wishlist wp ON p.id = wp.product_id " +
"LEFT JOIN wishlist wl ON wl.product_id = p.parent_id " +
"JOIN marketplace_products mp ON p.id = mp.product_id " +
"WHERE oi.id IS NULL AND op.id IS NULL AND wp.id IS NULL AND wl.id IS NULL AND mp.marketplace_seller_id=1;"
db . WithContext ( ctx ) . Exec ( qb )
//db.WithContext(ctx).Exec("UPDATE product_flat set sku=concat(id,\"-ordered\"), status=0 where status=1 AND product_id IN (SELECT product_id from marketplace_products where marketplace_seller_id=1)" )
//db.WithContext(ctx).Exec("UPDATE products set sku=concat(id,\"-ordered\") WHERE id IN (SELECT product_id from marketplace_products where marketplace_seller_id=1)")
return db . Error
}
func GetWishlistProducts ( db * gorm . DB ) ( [ ] Product , error ) {
var products [ ] Product
err := db . Joins ( "JOIN wishlist wp ON products.id = wp.product_id" ) .
Joins ( "JOIN marketplace_products mp ON products.id = mp.product_id where marketplace_seller_id=1" ) .
Find ( & products ) . Error
if err != nil {
log . Println ( err . Error ( ) )
return nil , err
}
return products , nil
//qb := "SELECT p.id,p.sku FROM products p " +
// "JOIN wishlist wp ON p.id = wp.product_id " +
// "JOIN marketplace_products mp ON p.id = mp.product_id where marketplace_seller_id=1);"
}
func GetFlatSources ( db * gorm . DB ) ( [ ] ProductAttributeValue , error ) {
var productSources [ ] ProductAttributeValue
2023-06-04 12:56:39 +00:00
//todo add filter by updated_at query
2023-05-03 08:07:34 +00:00
err := db . Joins ( "JOIN wishlist wp ON product_attribute_values.product_id = wp.product_id" ) .
2023-05-03 09:56:23 +00:00
Joins ( "JOIN marketplace_products mp ON product_attribute_values.product_id = mp.product_id" ) .
Find ( & productSources , "mp.marketplace_seller_id=1 AND product_attribute_values.text_value IS NOT NULL AND product_attribute_values.attribute_id=31" ) . Error
2023-05-03 08:07:34 +00:00
if err != nil {
log . Println ( err . Error ( ) )
return nil , err
}
return productSources , nil
}
2023-07-14 06:25:32 +00:00
func GetCartSource ( db * gorm . DB ) ( [ ] ProductAttributeValue , error ) {
var wishlistSources [ ] ProductAttributeValue
var cartSources [ ] ProductAttributeValue
var productSources [ ] ProductAttributeValue
err := db . Joins ( "JOIN wishlist wp ON product_attribute_values.product_id = wp.product_id" ) .
Joins ( "JOIN marketplace_products mp ON product_attribute_values.product_id = mp.product_id" ) .
Find ( & wishlistSources , "mp.marketplace_seller_id=1 AND product_attribute_values.text_value IS NOT NULL AND product_attribute_values.attribute_id=31" ) . Error
if err != nil {
log . Println ( err . Error ( ) )
} else {
productSources = append ( productSources , wishlistSources ... )
}
err = db . Joins ( "JOIN cart_items ci ON product_attribute_values.product_id = ci.product_id" ) .
Joins ( "JOIN marketplace_products mp ON product_attribute_values.product_id = mp.product_id" ) .
Find ( & cartSources , "mp.marketplace_seller_id=1 AND product_attribute_values.text_value IS NOT NULL AND product_attribute_values.attribute_id=31" ) . Error
if err != nil {
log . Println ( err . Error ( ) )
} else {
productSources = append ( productSources , cartSources ... )
}
return productSources , nil
}
2023-05-03 08:07:34 +00:00
//func DisableProducts (db *gorm.DB) error {
// ctx, cancel := context.WithTimeout(context.Background(), 10*time.Minute)
// defer cancel()
// db.WithContext(ctx).Exec("UPDATE product_flat set sku=concat(sku,\"-ordered\"), status=0")
// db.WithContext(ctx).Exec("UPDATE products set sku=concat(sku,\"-ordered\")")
// return db.Error
//}
//func Flush() error {
// _, err := helper.SendRequest("GET", os.Getenv("scout_flash"), nil, "")
//
// return err
//}