5、ginBlog 文章接口编写

增加文章的错误码

╰─➤  cat utils/errmsg/errmsg.go
ERROR_ARTICLENAME_USED = 2001

ERROR_ARTICLENAME_USED: "文章名称已存在",

model 目录下增加文章增删改查的方法

╰─➤  cat model/Article.go 
package model

import (
        "ginBlog/utils/errmsg"
        "github.com/jinzhu/gorm"
)

type Article struct {
        // 设置 Cid 为 外键
        Category Category `gorm:"foreignkey:Cid"`
        gorm.Model
        Title   string `gorm:"type:varchar(100);not null" json:"title"`
        // 利用 Cid 与 Category 模型相互关联,在执行查询的时候,能够达到Article、Category关联查询的功能
        Cid     int    `gorm:"type:int;not null" json:"cid"`
        Desc    string `gorm:"type:varchar(500)" json:"desc"`
        Content string `gorm:"type:longtext" json:"content"`
        Img     string `gorm:"type:varchar(100)" json:"img"`
}

// 查询文章是否存在
func CheckArticle(title string) int {
        var article Article
        db.Select("id").Where("title = ?", title).First(&article)
        if article.ID > 0 {
                return errmsg.ERROR_ARTICLENAME_USED
        }
        return errmsg.SUCCESS
}

// 创建文章
func CreateArticle(data *Article) int {
        err = db.Create(&data).Error
        if err != nil {
                return errmsg.ERROR
        }
        return errmsg.SUCCESS
}

// 根据分类获取文章列表
func GetArticlesByCategory(id int, pageSize int, pageNum int) []Article  {
        var artBycates []Article
        err := db.Preload("Category").Limit(pageSize).Offset((pageNum - 1) * pageSize).Where("cid = ?", id).Find(&artBycates).Error

        if err != nil {
                return nil
        }
        return artBycates
}


// 获取单个文章
func GetArticleInfo(id int) Article {
        var article Article
        err := db.Preload("Category").Where("id = ?", id).First(&article).Error
        if err != nil {
                return article
        }

        return article
}


// 获取文章列表
func GetArticles(pageSize int, pageNum int) []Article {
        var articles []Article
        err = db.Preload("Category").Limit(pageSize).Offset((pageNum -1 ) * pageSize).Find(&articles).Error
        if err != nil && err != gorm.ErrRecordNotFound {
                return nil
        }
        return articles
}


// 编辑文章
func EditArticle(id int, data *Article) int {
        var article Article
        var maps = make(map[string]interface{})
        maps["title"] = data.Title
        maps["cid"] = data.Cid
        maps["desc"] = data.Desc
        maps["content"] = data.Content
        maps["img"] = data.Img

        err = db.Model(&article).Where("id = ?", id).Update(maps).Error
        if err != nil {
                return errmsg.ERROR
        }
        return errmsg.SUCCESS

}

// 删除文章
func DeleteArticle(id int) int {
        var artcile Article
        err = db.Where("id = ?", id).Delete(&artcile).Error
        if err != nil {
                return errmsg.ERROR
        }
        return errmsg.SUCCESS
}

api/v1目录下增加文章路由功能

╰─➤  cat api/v1/article.go 
package v1

import (
        "ginBlog/model"
        "ginBlog/utils/errmsg"
        "github.com/gin-gonic/gin"
        "net/http"
        "strconv"
)

// 添加文章
func AddArticle(c *gin.Context)  {
        var data model.Article
        // 绑定数据模型
        c.ShouldBindJSON(&data)
        // 判断文章标题是否存在
        code := model.CheckArticle(data.Title)
        if code == errmsg.SUCCESS{
                model.CreateArticle(&data)
        }
        if code == errmsg.ERROR_ARTICLENAME_USED {
                code = errmsg.ERROR_ARTICLENAME_USED
        }
        c.JSON(http.StatusOK, gin.H{
                "status": code,
                "data": data,
                "message": errmsg.GetErrMsg(code),
        })
}

// 根据分类获取文章列表
func GetArtByCate(c *gin.Context)  {
        pageSize,_ := strconv.Atoi(c.Query("pageSize"))
        pageNum,_ := strconv.Atoi(c.Query("pageNum"))
        id,_ := strconv.Atoi(c.Param("id"))
        if pageSize == 0 {
                pageSize = -1
        }
        if pageNum == 0 {
                pageNum = -1
        }
        data := model.GetArticlesByCategory(id, pageSize, pageNum)
        code := errmsg.SUCCESS

        c.JSON(http.StatusOK, gin.H{
                "status": code,
                "data": data,
                "message": errmsg.GetErrMsg(code),
        })
}

// 查询单个文章
func GetArtInfo(c *gin.Context)  {
        id,_ := strconv.Atoi(c.Param("id"))
        data := model.GetArticleInfo(id)
        code := errmsg.SUCCESS

        c.JSON(http.StatusOK, gin.H{
                "status": code,
                "data": data,
                "message": errmsg.GetErrMsg(code),
        })
}

// 查询文章列表
func GetArticles(c *gin.Context) {
        pageSize,_ := strconv.Atoi(c.Query("pageSize"))
        pageNum,_ := strconv.Atoi(c.Query("pageNum"))
        if pageSize == 0 {
                pageSize = -1
        }
        if pageNum == 0 {
                pageNum = -1
        }

        data := model.GetArticles(pageSize, pageNum)
        code := errmsg.SUCCESS

        c.JSON(http.StatusOK, gin.H{
                "status":  code,
                "data":    data,
                "message": errmsg.GetErrMsg(code),
        })
}

// 编辑文章
func EditArticle(c *gin.Context)  {
        var data model.Article
        id,_ := strconv.Atoi(c.Param("id"))
        c.ShouldBindJSON(&data)
        code := model.CheckArticle(data.Title)
        if code == errmsg.SUCCESS{
                model.EditArticle(id, &data)
        }
        if code == errmsg.ERROR_ARTICLENAME_USED {
                c.Abort()
        }

        c.JSON(http.StatusOK, gin.H{
                "status": code,
                "data": data,
                "message": errmsg.GetErrMsg(code),
        })
}

// 删除文章
func DeleteArticle(c *gin.Context)  {
        id,_ := strconv.Atoi(c.Param("id"))
        code := model.DeleteArticle(id)

        c.JSON(http.StatusOK, gin.H{
                "status": code,
                "message": errmsg.GetErrMsg(code),
        })
}

注入路由

╰─➤  cat routers/router.go
            // 文章的路由接口
                routerV1.POST("article/add", v1.AddArticle)
                routerV1.GET("article/list/:id", v1.GetArtByCate)
                routerV1.GET("article/info/:id", v1.GetArtInfo)
                routerV1.GET("articles", v1.GetArticles)
                routerV1.PUT("article/:id", v1.EditArticle)
                routerV1.DELETE("article/:id", v1.DeleteArticle)

验证功能是否正常

增加文章

image

根据分类获取文章

image

获取单个文章信息

image

获取文章列表

image

删除文章

image

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值