增加文章的错误码
╰─➤ 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)
验证功能是否正常
增加文章
根据分类获取文章
获取单个文章信息
获取文章列表
删除文章