UpdateStatus BUG

来源:31-9 商品删除,更新

城中城

2022-06-23

不知道是不是我代码敲错了
我看到一个感觉非常有问题的代码
如下
go 的 具体路径的代码

func UpdateStatus(ctx *gin.Context) {
	goodsStatusForm := forms.GoodsStatusForm{}
	// 如果是传递 form 格式
	if err := ctx.ShouldBindJSON(&goodsStatusForm); err != nil {
		HandleValidatorError(ctx, err)
		return
	}
	id := ctx.Param("id")
	idInt, err := strconv.ParseInt(id, 10, 32)
	if err != nil {
		ctx.Status(http.StatusNotFound)
		return
	}
	_, err = global.GoodsSrvClient.UpdateGoods(context.Background(), &proto.CreateGoodsInfo{
		Id:     int32(idInt),
		IsNew:  *goodsStatusForm.IsNew,
		IsHot:  *goodsStatusForm.IsHot,
		OnSale: *goodsStatusForm.OnSale,
	})
	if err != nil {
		HandleGrpcErrorToHttp(err, ctx)
		return
	}
	ctx.JSON(http.StatusOK, gin.H{
		"msg": "修改成功",
	})

}

可以看到 这代码没有对 category 和 brand 等 参数 进行传递
只传递 了 IsNew IsHot OnSale 这三个参数

但是 底层 python 代码中 很明确规定了 你需要传递 category 和 brand 等 参数
如以下代码:

    @logger.catch
    def UpdateGoods(self, request: goods_pb2.GoodInfoRequest, context):
        #商品更新
        try:
            category = Category.get(Category.id==request.categoryId)
        except DoesNotExist as e:
            context.set_code(grpc.StatusCode.NOT_FOUND)
            context.set_details("商品分类不存在")
            return goods_pb2.GoodsInfoResponse()

        try:
            brand = Brands.get(Brands.id==request.brandId)
        except DoesNotExist as e:
            context.set_code(grpc.StatusCode.NOT_FOUND)
            context.set_details("品牌不存在")
            return goods_pb2.GoodsInfoResponse()

        try:
            goods = Goods.get(Goods.id == request.id)
        except DoesNotExist as e:
            context.set_code(grpc.StatusCode.NOT_FOUND)
            context.set_details("商品不存在")
            return goods_pb2.GoodsInfoResponse()

        goods.brand = brand
        goods.category = category
        goods.name = request.name
        goods.goods_sn = request.goodsSn
        goods.market_price = request.marketPrice
        goods.shop_price = request.shopPrice
        goods.goods_brief = request.goodsBrief
        goods.ship_free = request.shipFree
        goods.images = list(request.images)
        goods.desc_images = list(request.descImages)
        goods.goods_front_image = request.goodsFrontImage
        goods.is_new = request.isNew
        goods.is_hot = request.isHot
        goods.on_sale = request.onSale

        goods.save()

        # TODO 此处完善库存的设置 - 分布式事务
        return self.convert_model_to_message(goods)

这代码很明确的指出 如果你没传递 categoryId brandId 将直接返回错误

所有导致我很疑惑 为什么没人提出这个bug
还是我敲的代码漏敲的那个部分?

写回答

1回答

bobby

2022-06-25

这里确实有点细节问题, 需要修改一下

0
2
bobby
回复
半亩糖
有 https://zhuanlan.zhihu.com/p/46603988 方案4可以参考一下
2022-08-16
共2条回复

Go+Python打造电商系统 自研微服务框架 抓紧高薪机遇

快速转型Go工程师,成为具备双语言后端能力的开发者

510 学习 · 530 问题

查看课程