// Code generated by goctl. DO NOT EDIT.

package gmodel

import (
	"context"
	"gorm.io/gorm"
)

type FindOneCartByParamsReq struct {
	UserId     *int64
	ProductId  *int64
	TemplateId *int64
	PriceId    *int64
	DesignId   *int64
	MaterialId *int64
	Status     *int64
}

func (c *FsCartModel) FindOne(ctx context.Context, id int64) (resp *FsCart, err error) {
	err = c.db.WithContext(ctx).Model(&FsCart{}).Where("`id` = ?", id).First(&resp).Error
	return resp, err
}
func (c *FsCartModel) FindOneCartByParams(ctx context.Context, req FindOneCartByParamsReq) (resp *FsCart, err error) {
	db := c.db.WithContext(ctx).Model(&FsCart{})
	if req.UserId != nil {
		db = db.Where("`user_id` = ?", req.UserId)
	}
	if req.ProductId != nil {
		db = db.Where("`product_id` = ?", req.ProductId)
	}
	if req.TemplateId != nil {
		db = db.Where("`template_id` = ?", req.TemplateId)
	}
	if req.PriceId != nil {
		db = db.Where("`price_id` = ?", req.PriceId)
	}
	if req.DesignId != nil {
		db = db.Where("`design_id` = ?", req.DesignId)
	}
	if req.MaterialId != nil {
		db = db.Where("`material_id` = ?", req.MaterialId)
	}
	if req.Status != nil {
		db = db.Where("`status` = ?", req.Status)
	}
	err = db.First(&resp).Error
	if err != nil {
		return nil, err
	}
	return
}
func (c *FsCartModel) Create(ctx context.Context, data FsCart) error {
	return c.db.WithContext(ctx).Model(&FsCart{}).Create(&data).Error
}
func (c *FsCartModel) Update(ctx context.Context, id int64, data FsCart) error {
	return c.db.WithContext(ctx).Model(&FsCart{}).Where("`id` = ?", id).Updates(data).Error
}
func (c *FsCartModel) UpdateByIdUserId(ctx context.Context, id int64, userId int64, data FsCart) error {
	return c.db.WithContext(ctx).Model(&FsCart{}).Where("`id` = ? and `user_id` = ?", id, userId).Updates(data).Error
}
func (c *FsCartModel) CountUserCart(ctx context.Context, userId int64) (total int64, err error) {
	err = c.db.WithContext(ctx).Model(&FsCart{}).Where("`user_id` = ? and `status` = ? limit 1", userId, 1).Count(&total).Error
	if err != nil {
		return 0, err
	}
	return
}
func (c *FsCartModel) GetAllByUserId(ctx context.Context, userId int64, sort string) (resp []FsCart, err error) {
	db := c.db.WithContext(ctx).Model(&FsCart{}).Where("`user_id` = ? and `status` = ?", userId, 1)
	switch sort {
	case "ctime-desc":
		db = db.Order("`ctime` DESC")
	case "ctime-asc":
		db = db.Order("`ctime` ASC")
	}
	err = db.Find(&resp).Error
	if err != nil {
		return nil, err
	}
	return
}

func (c *FsCartModel) GetUserCartsByIds(ctx context.Context, userId int64, ids []int64) (resp []FsCart, err error) {
	if userId <= 0 || len(ids) == 0 {
		return
	}
	err = c.db.WithContext(ctx).Model(&FsCart{}).Where("`id` in (?) and `user_id` = ?", ids, userId).Find(&resp).Error
	return resp, err
}

func (c *FsCartModel) DeleteCartsByIds(ctx context.Context, ids []int64) ( err error) {
	if len(ids) == 0 {
		return
	}
	return c.db.Table(c.name).WithContext(ctx).Model(&FsCart{}).Where("`id` in (?)", ids).Update("status", 0).Error
}

func (c *FsCartModel) RBDeleteCartsByIds(rowBuilder *gorm.DB,ids []int64) ( err error) {
	if len(ids) == 0 {
		return
	}
	return rowBuilder.Where("`id` in (?)", ids).Update("status", 0).Error
}

func (c *FsCartModel) BuilderTrans(ctx context.Context,selectData []string) *gorm.DB {
	var rowBuilder = c.db.WithContext(ctx)

	if selectData != nil {
		rowBuilder = rowBuilder.Select(selectData)
	} else {
		rowBuilder = rowBuilder.Select("*")
	}
	return rowBuilder
}