1. 展示商品
1.1 路由接口注册
GET请求获取商品列表
v1.GET("products", api.ListProducts)
1.2 接口函数编写
1.2.1 service层
创建一个展示商品的结构体
type ListProductsService struct { PageNum int `form:"pageNum"` PageSize int `form:"pageSize"` CategoryID uint `form:"category_id" json:"category_id"` }
创建该结构体下的列表方法
func (service *ListProductsService) List() serializer.Response { ... }
1.2.2 api层
创建一个展示列表服务对象
listProductsService := service.ListProductsService{}
绑定数据
c.ShouldBind(&listProductsService)
调用展示商品列表对象下的展示方法
res := listProductsService.List()
返回上下文
c.JSON(200, res)
api层完整代码
func ListProducts(c *gin.Context) { listProductsService := service.ListProductsService{} if err := c.ShouldBind(&listProductsService); err == nil { res := listProductsService.List() c.JSON(200, res) } else { c.JSON(200, ErrorResponse(err)) logging.Info(err) } }
1.3 服务函数编写
创建一个商品列表模型对象
var products []model.Product
设置分页
if service.PageSize == 0 { service.PageSize = 15 }
如果分类传过来是0的话就返回所有的商品
if service.CategoryID == 0 { if err := model.DB.Model(model.Product{}). Count(&total).Error; err != nil { logging.Info(err) code = e.ErrorDatabase return serializer.Response{ Status: code, Msg: e.GetMsg(code), Error: err.Error(), } } if err := model.DB.Offset((service.PageNum - 1) * service.PageSize). Limit(service.PageSize).Find(&products). Error; err != nil { logging.Info(err) code = e.ErrorDatabase return serializer.Response{ Status: code, Msg: e.GetMsg(code), Error: err.Error(), } }
不为0的话,就返回对应分类的商品
if err := model.DB.Model(model.Product{}).Preload("Category"). Where("category_id = ?", service.CategoryID). Count(&total).Error; err != nil { logging.Info(err) code = e.ErrorDatabase return serializer.Response{ Status: code, Msg: e.GetMsg(code), Error: err.Error(), } }
序列化返回所有的商品,注意要返回所有商品的总数
for _, item := range products { products := serializer.BuildProduct(item) productList = append(productList, products) } return serializer.BuildListResponse(serializer.BuildProducts(products), uint(total))
1.4 验证服务
发送请求
获取响应