Go 语言开发后台管理接口之贴子管理

滔哥 2021年02月27日 273次浏览

首先我们修改服务端代码,新增帖子管理相关接口。新增文件server/admin_topic_controller.go定义AdminTopicController,完整代码如下:

package main

import (
    "github.com/kataras/iris/context"
    "github.com/mlogclub/simple"
)

type AdminTopicController struct {
    Ctx context.Context
}

// 帖子列表接口
func (this *AdminTopicController) GetList() *simple.JsonResult {
    page := this.Ctx.URLParamIntDefault("page", 1) // 页码
    offset := 20 * (page - 1)                      // Offset

    var topics []Topic
    var totalCount int

    db.Order("id desc").Offset(offset).Limit(20).Find(&topics) // 查列表
    db.Model(&Topic{}).Count(&totalCount)                      // 查计数

    return simple.NewEmptyRspBuilder().Put("itemList", topics).Put("count", totalCount).JsonResult()
}

// 帖子删除接口
func (this *AdminTopicController) PostDelete() *simple.JsonResult {
    id, err := this.Ctx.PostValueInt64("id")
    if err != nil {
        return simple.JsonErrorMsg(err.Error())
    }
    db.Delete(&Topic{}, "id = ?", id)
    return simple.JsonSuccess()
}

然后修改server/main.go文件,将AdminTopicController注册到iris路由中,代码片段如下:

...

mvc.Configure(app.Party("/api/admin"), func(mvcApp *mvc.Application) {
    // 使用middleware实现登录校验
    mvcApp.Router.Use(func(context context.Context) {
        if context.Path() == "/api/admin/user/login" { // 登录接口不做校验
            context.Next()
            return
        }
        user := UserService.GetCurrent(context)
        if user == nil { // 如果用户没登录,那么返回错误码1,要求登录
            _, _ = context.JSON(simple.JsonError(simple.ErrorNotLogin))
            context.StopExecution()
            return
        }
        context.Next()
    })
    mvcApp.Party("/user").Handle(new(AdminUserController))
    mvcApp.Party("/topic").Handle(new(AdminTopicController))
})

...