Goweb开发之Iris实战:食品功能模块业务开发

上节内容我们学习了添加食品种类,食品种类在操作中属于食品记录下的一个子属性。因此,这节内容我们来学习如何进行添加食品记录。

根据之前我们的学习内容和文档说明,我们把相对独立的功能模块进行单独的定义和实现。在本实战项目中,到目前为止,我们还没有定义和创建食品功能模块的业务逻辑处理器和功能实现结构体。

因此,首先我们创建并定义食品结构体如下所示:

创建食品功能模块

type Food struct {
    Id          int           `json:"item_id"`     //食品id
    Name        string        `json:"name"`        //食品名称
    Description string        `json:"description"` //食品描述
    Rating      int           `json:"rating"`      //食品评分
    MonthSales  int           `json:"month_sales"` //月销量
    ImagePath   string        `json:"image_path"`  //食品图片地址
    Activity    string        `json:"activity"`    //食品活动
    Attributes  string        `json:"attributes"`  //食品特点
    Specs       string        `json:"specs"`       //食品规格
    CategoryId  int64         `xorm:"index"`       //食品种类ID
    Category    *FoodCategory `xorm:"-"`           //食品种类
    Restaurant  *Shop         `xorm:"-"`           //食品店铺信息
    DelFlag     int           `json:"del_flag"`    //是否已经被删除 0表示未删除 1表示1被删除
}

如上的结构体定义即是Food结构体的定义,对应的会在mysql数据库中生成food表格。

创建完成Food结构体以后,接下来创建处理请求的FoodController

FoodController定义及处理请求

  • FoodController定义如下
type FoodController struct {
   Ctx iris.Context
   Service service.FoodService
}
  • 获取食品记录总数
  • url:foods/count?restaurant_id=undefined
  • 请求类型:get
  • 请求说明:获取所有的食品记录总数 该请求详细情况如上所列,因此我们应该在Controller中定义GetCount方法,具体方法定义及实现如下:
func (fc *FoodController) GetCount() mvc.Result {
​
result, err := fc.Service.GetFoodCount()
if err != nil {
 return mvc.Response{
  Object: map[string]interface{}{
   "status": utils.RESPMSG_FAIL,
   "count":  0,
  },
 }
}
//查询成功
return mvc.Response{
 Object: map[string]interface{}{
  "status": utils.RESPMSG_OK,
  "count":  result,
 },
}
}
  • FoodService的GetCount功能实现 在controller中的GetCount方法中,调用了FoodService的方法来实现数据库查询并返回,FoodService中GetCount方法的定义和实现如下所示:
func (fs *foodService) GetFoodCount() (int64, error) {
count, err := fs.Engine.Count(new(model.Food))
return count, err
}
  • 获取食品列表
  • url:/shopping/v2/foods/
  • 请求类型:get
  • 请求说明:获取食品列表 在controller中定义Get方法,该方法用于实现获取食品列表,FoodController中Get方法定义如下:
func (fc *FoodController) Get() mvc.Result {
offset, err := strconv.Atoi(fc.Ctx.Params().Get("offset"))
limit, err := strconv.Atoi(fc.Ctx.Params().Get("limit"))
if err != nil {
 offset = 0
 limit = 20
}
list, err := fc.Service.GetFoodList(offset, limit)
if err != nil {
 return mvc.Response{
  Object: map[string]interface{}{
   "status":  utils.RECODE_FAIL,
   "type":    utils.RESPMSG_ERROR_FOODLIST,
   "message": utils.Recode2Text(utils.RESPMSG_ERROR_FOODLIST),
  },
 }
}
//成功
return mvc.Response{
 Object: &list,
}
}
  • FoodService的GetFoodList功能实现 在controller中的Get方法中,调用了FoodService的方法来实现数据库查询并返回,FoodService中GetFoodList方法的定义和实现如下所示:
func (fs *foodService) GetFoodList(offset, limit int) ([]model.Food, error) {
foodList := make([]model.Food, 0)
err := fs.Engine.Where(" del_flag  = 0 ").Limit(limit, offset).Find(&foodList)
return foodList, err
}
  • 添加食品记录
  • url:/shopping/v2/foods/
  • 请求类型:get
  • 请求说明:获取食品列表 在controller中定义Get方法,该方法用于实现获取食品列表。在添加食品列表功能时,因为是和FoodCategory一起操作,因此我们把添加食品记录定义在CategoryController中进行实现,CategoryController中Get方法定义如下:
func (cc *CategoryController) PostaAddfood() mvc.Result {
​
var foodEntity AddFoodEntity
err := cc.Ctx.ReadJSON(&foodEntity)
if err != nil {
 return mvc.Response{
  Object: map[string]interface{}{
   "status":  utils.RECODE_FAIL,
   "type":    utils.RESPMSG_ERROR_FOODADD,
   "message": utils.Recode2Text(utils.RESPMSG_ERROR_FOODADD),
  },
 }
}
​
var food model.Food
food.Name = foodEntity.Name
food.Description = foodEntity.Description
food.ImagePath = foodEntity.ImagePath
food.Activity = foodEntity.Activity
food.CategoryId = int64(foodEntity.CategoryId)
//food.Restaurant = foodEntity.RestaurantId
food.DelFlag = 0
food.Rating = 0 //初始评分为零
​
isSuccess := cc.Service.SaveFood(food)
if !isSuccess {
 return mvc.Response{
  Object: map[string]interface{}{
   "status":  utils.RECODE_FAIL,
   "type":    utils.RESPMSG_ERROR_FOODADD,
   "message": utils.Recode2Text(utils.RESPMSG_ERROR_FOODADD),
  },
 }
}
​
return mvc.Response{
 Object: map[string]interface{}{
  "status":  utils.RECODE_OK,
  "success": utils.Recode2Text(utils.RESPMSG_SUCCESS_FOODADD),
 },
}
}
  • CategoryService的SaveFood功能实现 在controller中的Get方法中,调用了CategoryService的方法来实现数据库查询并返回,CategoryService中SaveFood方法的定义和实现如下所示:
func (cs *categoryService) SaveFood(food model.Food) bool {
_, err := cs.Engine.Insert(&food)
return err == nil
}

Controller绑定

当我们所有的工作都做完以后,我们使用app进行食品模块的路由组解析和FoodController控制器的绑定。代码如下所示:

foodService := service.NewFoodService(engine)
foodMvc := mvc.New(app.Party("/shopping/v2/foods/"))
foodMvc.Register(
        foodService,
    )
foodMvc.Handle(new(controller.FoodController)) //控制器
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值