25、订单和购物车-web服务

一、快速启动order_web项目

  • 将之前的goods_web项目的文件拷贝到order_web目录下
  • 选择路径 D:\GOProject\mxshop_srvs\mxshop_api\order_web 替换:将 goods_web 全部替换为 order_web
  • 添加 order_web 的 nacos配置
{
   
  "host": "192.168.78.1",
  "name": "order_web",
  "port": 8083,
  "tags": ["mxshop","imooc","bobby","order","web"],
  "goods_srv": {
   
    "name": "goods_srv"
  },
  "order_srv": {
   
    "name": "order_srv"
  },
  "jwt": {
   
    "key": "VYLDYq3&hGWjWqF$K1ih"
  },
  "consul": {
   
    "host": "192.168.78.131",
    "port": 8500
  }
}

在这里插入图片描述

  • 修改api、router、proto:具体的查看源码

在这里插入图片描述


二、购物车api接口

1 - 测试中间件

  • order_web/middlewares/test_set_userid.go:这里为了测试效率去掉了jwt的验证,并且直接指定userId = 1 来进行接口测试
package middlewares

import (
	"github.com/gin-gonic/gin"
)

func SetUserId() gin.HandlerFunc {
   
	return func(ctx *gin.Context) {
   
		var userId uint = 1
		ctx.Set("userId", userId)
		ctx.Next()
	}
}

  • order_web/router/router_shop_cart.go:添加设置userId的中间件
package router

import (
	"github.com/gin-gonic/gin"
	"web_api/order_web/api/shop_cart"
	"web_api/order_web/middlewares"
)

func InitShopCartRouter(Router *gin.RouterGroup) {
   
	//ShopCartRouter := Router.Group("shopcarts").Use(middlewares.JWTAuth()) // 测试删除jwt验证
	ShopCartRouter := Router.Group("shopcarts").Use(middlewares.SetUserId())
	{
   
		ShopCartRouter.GET("", shop_cart.List)          //购物车列表
		ShopCartRouter.DELETE("/:id", shop_cart.Delete) //删除条目
		ShopCartRouter.POST("", shop_cart.New)          //添加商品到购物车
		ShopCartRouter.PATCH("/:id", shop_cart.Update)  //修改条目
	}
}

2 - 订单列表接口

  • order_web/api/shop_cart/api_shop_cart.go
func List(ctx *gin.Context) {
   
	//获取购物车商品
	userId, _ := ctx.Get("userId")
	fmt.Println(userId)
	rsp, err := global.OrderSrvClient.CartItemList(context.Background(), &proto.UserInfo{
   
		Id: int32(userId.(uint)),
	})
	if err != nil {
   
		zap.S().Errorw("[List] 查询 【购物车列表】失败")
		api.HandleGrpcErrorToHttp(err, ctx)
		return
	}

	ids := make([]int32, 0)
	for _, item := range rsp.Data {
   
		ids = append(ids, item.GoodsId)
	}
	if len(ids) == 0 {
   
		ctx.JSON(http.StatusOK, gin.H{
   
			"total": 0,
		})
		return
	}

	//请求商品服务获取商品信息
	goodsRsp, err := global.GoodsSrvClient.BatchGetGoods(context.Background(), &proto.BatchGoodsIdInfo{
   
		Id: ids,
	})
	if err != nil {
   
		zap.S(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无休止符

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值