小小千想和您聊一聊

当前位置: 首页> 技术分享> 食品功能模块业务开发

食品功能模块业务开发

@author:Davie版权所有:北京千锋互联科技有限公司

上节内容学习了如何获取商铺总数及商铺列表数据的功能,本节内容继续来看和商铺模块相关的一个功能模块--食品类别模块。

开发完成商铺功能以后,我们可以对某个商铺进行添加食物/食品操作。在添加食品记录时,需要选择食品类别属性。因此,我们需要先定义食品种类的结构体,并进行食品种类数据的添加。

食品种类结构体定义

首先定义食品种类结构体,该结构体包含食品种类名称种类描述种类级别,以及父级别种类ID父级别种类ID字段主要是用来实现在一张表中实现种类的上下级关系,如下图表格所示:例如上图中的食品类别表中:id为2的韩国料理记录中,parent_category_id值为1,指的就是id为1的异国料理所在记录。因此,我们可以看到,通过parent_category_id就将食品种类之间的级别关系表达了出来。

 
type FoodCategory struct {
	Id               int    `xorm:"pk autoincr" json:"id"` //食品的id
	CategoryName     string `json:"name"`                  //食品种类名称
	CategoryDesc     string `json:"description"`           //食品种类描述
	Level            int    `json:"level"`                 //食品种类层级
	ParentCategoryId int    `json:"parent_category_id"`    //父一级的类型id
}

CategoryController解析请求

依然延续之前的开发思路,我们通过定义CategoryController进行结构体的定义及功能方法的实现。

  • 结构体定义

 
type CategoryController struct {
	Ctx     iris.Context
	Service service.CategoryService
}
  • Controller功能方法定义如下

 
func (cc *CategoryController) BeforeActivation(a mvc.BeforeActivation) {
	a.Handle("GET", "/getcategory/{shopId}", "GetCategoryByShopId")
}

func (cc *CategoryController) GetCategoryByShopId() mvc.Result {

	shopIdStr := cc.Ctx.Params().Get("shopId")
	if shopIdStr == "" {
		iris.New().Logger().Info(shopIdStr)
		return mvc.Response{
			Object: map[string]interface{}{
				"status":  utils.RECODE_FAIL,
				"message": utils.Recode2Text(utils.RESPMSG_ERROR_CATEGORIES),
			},
		}
	}

	shopId, err := strconv.Atoi(shopIdStr)
	if err != nil {
		iris.New().Logger().Info(shopId)
		return mvc.Response{
			Object: map[string]interface{}{
				"status":  utils.RECODE_FAIL,
				"message": utils.Recode2Text(utils.RESPMSG_ERROR_CATEGORIES),
			},
		}
	}

	//调用服务实体功能类查询商铺对应的食品种类列表
	categories, err := cc.Service.GetCategoryByShopId(int64(shopId))
	if err != nil {
		iris.New().Logger().Info(err.Error())
		return mvc.Response{
			Object: map[string]interface{}{
				"status":  utils.RECODE_FAIL,
				"message": utils.Recode2Text(utils.RESPMSG_ERROR_CATEGORIES),
			},
		}
	}

	//返回对应店铺的食品种类类型
	return mvc.Response{
		Object: map[string]interface{}{
			"status":        utils.RECODE_OK,
			"category_list": &categories,
		},
	}
}

func (cc *CategoryController) PostAddcategory() mvc.Result {

	var categoryEntity *CategoryEntity
	cc.Ctx.ReadJSON(&categoryEntity)

	if categoryEntity.Name == "" {
		return mvc.Response{
			Object: map[string]interface{}{
				"status":  utils.RECODE_FAIL,
				"message": utils.Recode2Text(utils.RESPMSG_ERROR_CATEGORYADD),
			},
		}
	}

	//构造要添加的数据记录
	foodCategory := &model.FoodCategory{
		CategoryName: categoryEntity.Name,
		CategoryDesc: categoryEntity.Description,
		RestaurantId: categoryEntity.RestaurantId,
	}

	result := cc.Service.AddCategory(foodCategory)
	if !result {
		return mvc.Response{
			Object: map[string]interface{}{
				"status":  utils.RECODE_FAIL,
				"message": utils.Recode2Text(utils.RESPMSG_ERROR_CATEGORYADD),
			},
		}
	}

	//成功
	return mvc.Response{
		Object: map[string]interface{}{
			"status":  utils.RECODE_OK,
			"message": utils.Recode2Text(utils.RESPMSG_SUCCESS_CATEGORYADD),
		},
	}
}

如上是Controller的实现,接下来是Service的实现,与之前相同,我们依然定义CategoryService

CategoryService定义服务实现


type CategoryService interface {
	AddCategory(model *model.FoodCategory) bool
	GetCategoryByShopId(shopId int64) ([]model.FoodCategory, error)
}

type categoryService struct {
	Engine *xorm.Engine
}

func NewCategoryService(engine *xorm.Engine) CategoryService {
	return &categoryService{
		Engine: engine,
	}
}


func (cs *categoryService) GetCategoryByShopId(shopId int64) ([]model.FoodCategory, error) {
	categories := make([]model.FoodCategory, 0)
	err := cs.Engine.Where(" restaurant_id = ? ", shopId).Find(&categories)
	if err != nil {
		iris.New().Logger().Info(err.Error())
	}
	iris.New().Logger().Info(categories)
	return categories, err
}

func (cs *categoryService) AddCategory(category *model.FoodCategory) bool {
	iris.New().Logger().Info(category)

	_, err := cs.Engine.Insert(&category)
	if err != nil {
		iris.New().Logger().Info(err.Error())
	}
	return err != nil
}

如上的代码是CategoryService的具体实现,具体的引用关系,在之前我们的模块中已经具体讲过,这里我们只给出代码实现。

完成了上述两个解析和服务的定义以后,我们来看一下如何在main.go文件中进行绑定。mvc配置绑定操作如下:

 
categoryService := service.NewCategoryService(engine)
	category := mvc.New(app.Party("/shopping/"))
	category.Register(
		categoryService,
	)
	category.Handle(new(controller.CategoryController)) //控制器

上一篇:HTML5工具初识之网页编辑器

下一篇:CSS3 弹性盒

QQ技术交流群

千锋go语言官方①群
816085262

加入群聊