天天看点

【Go实战 | 电商平台】(10) 搜索商品

文章目录

1. 搜索商品

1.1 路由接口注册

1.2 接口函数编写

1.2.1 service层

1.2.2 api层

1.3 服务函数编写

1.4 验证服务

v1.POST("products", api.SearchProducts)      

定义一个搜索商品的服务结构体

结构体中的info就是传送过来的要搜索商品的信息

type SearchProductsService struct {
    Info string `form:"info" json:"info"`
    PageNum            int    `form:"pageNum"`
    PageSize           int    `form:"pageSize"`
}      

定义这个结构体的搜索方法

func (service *SearchProductsService) Search() serializer.Response {
    ...
}      

定义搜索商品服务的对象

searchProductsService := service.SearchProductsService{}      

绑定这个结构对象到上下文中

c.ShouldBind(&searchProductsService)      

调用商品服务对象下的搜索方法

res := searchProductsService.Search()      

上下文返回

c.JSON(200, res)      

完整代码

func SearchProducts(c *gin.Context) {
    searchProductsService := service.SearchProductsService{}
    if err := c.ShouldBind(&searchProductsService); err == nil {
        res := searchProductsService.Search()
        c.JSON(200, res)
    } else {
        c.JSON(200, ErrorResponse(err))
        logging.Info(err)
    }
}      

定义商品模型对象列表

var products []model.Product
    code := e.SUCCESS      

如果传送过来的是页数是0的话,就默认是15

if service.PageSize==0 {
  service.PageSize=15
    }      

LIKE对数据库进行模型搜索

err := model.DB.Where("name LIKE ?", "%"+service.Info+"%").
  Offset((service.PageNum - 1) * service.PageSize).
  Limit(service.PageSize).Find(&products).Error      

返回数据

return serializer.Response{
  Status: code,
  Data:   serializer.BuildProducts(products),
  Msg:    e.GetMsg(code),
    }      

商品请求

【Go实战 | 电商平台】(10) 搜索商品

响应返回

【Go实战 | 电商平台】(10) 搜索商品