package repository import ( req "sghgogs.com/micro/shopping-service/domain/model/request" pb "sghgogs.com/micro/shopping-service/proto" "time" ) func (u *Repository) GetProductList(query *pb.GetProductListRequest) ([]req.Product, int64, error) { // Select("id, name, description, price, stock_quantity, created_at, updated_at, category_id"). products := make([]req.Product, 0) tx := u.db.Model(&req.Product{}). Preload("Category"). Order("id desc") if query.Keyword != "" { tx.Where("name = ? ", query.Keyword) } var totalCount int64 tx.Count(&totalCount) return products, totalCount, tx.Limit(int(query.PageSize)).Offset(int((query.Page - 1) * query.PageSize)).Find(&products).Error } func (u *Repository) GetProduct(productID int64) (req.Product, error) { var product req.Product return product, u.db.Model(&req.Product{}).Preload("Category").Find(&product, productID).Error } func (u *Repository) CreateMultipleProducts(products []req.Product) error { // 开始事务 tx := u.db.Begin() // 错误处理 defer func() { if r := recover(); r != nil { tx.Rollback() } }() if err := tx.Create(&products).Error; err != nil { tx.Rollback() return err } return tx.Commit().Error } func (u *Repository) UpdateProduct(product *pb.UpdateProductRequest) error { // 开始事务 tx := u.db.Begin() // 错误处理 defer func() { if r := recover(); r != nil { tx.Rollback() } }() if err := tx.Model(&req.Product{}).Where("id = ?", product.ProductId).Updates(map[string]interface{}{ "name": product.Name, "description": product.Description, "price": product.Price, "stock_quantity": product.StockQuantity, "updated_at": time.Now(), }).Error; err != nil { tx.Rollback() return err } return tx.Commit().Error } func (u *Repository) DeleteProduct(ProductId int64) error { return u.db.Model(&req.Product{}).Delete(&req.Product{ID: ProductId}).Error }