diff --git a/handlers/tag/handler.go b/handlers/tag/handler.go index b6e2a9b..8dd9c18 100644 --- a/handlers/tag/handler.go +++ b/handlers/tag/handler.go @@ -1,30 +1,170 @@ package tag import ( + "cmsDemo/models" + "cmsDemo/utils" + "fmt" "github.com/gin-gonic/gin" + "log" "net/http" ) func Post(ctx *gin.Context) { + // 1.解析请求主体数据 + tag := models.Tag{} + if err := ctx.ShouldBind(&tag); err != nil { + log.Println(err) + ctx.JSON(http.StatusOK, gin.H{ + "error": 1, + "message": "数据绑定失败", + }) + return + } + + // 2.数据入库 + if err := utils.DB.Create(&tag).Error; err != nil { + log.Println(err) + ctx.JSON(http.StatusOK, gin.H{ + "error": 2, + "message": "tag数据入库失败", + }) + return + } + + // 3.响应 ctx.JSON(http.StatusOK, gin.H{ - "message": "tag post", + "error": 0, + "data": tag, }) } +type DeleteReq struct { + IDs []uint `form:"ids"` +} + func Delete(ctx *gin.Context) { + // 1. 解析id值 + req := DeleteReq{} + if err := ctx.ShouldBindQuery(&req); err != nil { + log.Println(err) + ctx.JSON(http.StatusOK, gin.H{ + "error": 1, + "message": "数据绑定失败", + }) + return + } + + // 2. 数据库删除 + result := utils.DB.Delete(&models.Tag{}, req.IDs) + if err := result.Error; err != nil { + log.Println(err) + ctx.JSON(http.StatusOK, gin.H{ + "error": 2, + "message": "数据删除失败", + }) + return + } + + // 3.响应 ctx.JSON(http.StatusOK, gin.H{ - "message": "tag delete", + "error": 0, + "message": fmt.Sprintf("删除了%d条", result.RowsAffected), }) } func Put(ctx *gin.Context) { + // 1.解析请求主体数据 + tag := models.Tag{} + if err := ctx.ShouldBind(&tag); err != nil { + log.Println(err) + ctx.JSON(http.StatusOK, gin.H{ + "error": 1, + "message": "数据绑定失败", + }) + return + } + + // 2.数据入库 + if err := utils.DB.Debug().Updates(&tag).Error; err != nil { + log.Println(err) + ctx.JSON(http.StatusOK, gin.H{ + "error": 2, + "message": "tag数据入库失败", + }) + return + } + + // 3.响应 + utils.DB.First(&tag, tag.ID) ctx.JSON(http.StatusOK, gin.H{ - "message": "tag put", + "error": 0, + "data": tag, }) } +type GetReq struct { + ID uint `form:"id"` + Keyword string `form:"keyword"` +} + +//type GetResp struct { +// Error int `json:"error"` +// Message string `json:"message"` +// Data any `json:"data"` +//} + func Get(ctx *gin.Context) { - ctx.JSON(http.StatusOK, gin.H{ - "message": "tag get", - }) + // 1. 解析id值 + req := GetReq{} + if err := ctx.ShouldBindQuery(&req); err != nil { + log.Println(err) + ctx.JSON(http.StatusOK, gin.H{ + "error": 1, + "message": "数据绑定失败", + }) + return + } + + // 2. 数据库查询 + if req.ID != 0 { // 查询单条 + tag := models.Tag{} + if err := utils.DB.First(&tag, req.ID).Error; err != nil { + log.Println(err) + ctx.JSON(http.StatusOK, gin.H{ + "error": 2, + "message": "数据查询失败", + }) + return + } + + // 3.响应 + ctx.JSON(http.StatusOK, gin.H{ + "data": tag, + }) + } else { // 查询列表 + query := utils.DB.Model(&models.Tag{}) + // filter + if req.Keyword != "" { + query.Where("title LIKE ?", "%"+req.Keyword+"%") + } + // pager + // order + // 还应该有翻页,排序等 + + // 执行查询 + var tags []models.Tag + if err := query.Find(&tags).Error; err != nil { + log.Println(err) + ctx.JSON(http.StatusOK, gin.H{ + "error": 2, + "message": "数据查询失败", + }) + return + } + // 3.响应 + ctx.JSON(http.StatusOK, gin.H{ + "error": 0, + "data": tags, + }) + } }