Files
nl-blogs/server/handlers/tag.go
2026-01-16 17:03:34 +08:00

133 lines
2.5 KiB
Go

package handlers
import (
"fmt"
"github.com/gin-gonic/gin"
"github.com/niangaodev/art-code/models"
"github.com/niangaodev/art-code/repositories"
"github.com/niangaodev/art-code/utils"
)
// 获取标签列表
func GetTags(c *gin.Context) {
// 从数据库获取所有标签
tags, err := repositories.GetTags()
if err != nil {
utils.ServerError(c, err)
return
}
// 构建响应
responses := repositories.BuildTagsResponse(tags)
utils.Success(c, responses)
}
func GetTag(c *gin.Context) {
// 解析标签ID
idStr := c.Param("id")
var id uint
_, err := fmt.Sscanf(idStr, "%d", &id)
if err != nil {
utils.Error(c, 400, "Invalid tag ID")
return
}
// 从数据库获取标签
tag, err := repositories.GetTagByID(id)
if err != nil {
utils.ServerError(c, err)
return
}
if tag == nil {
utils.Error(c, 404, "Tag not found")
return
}
// 构建响应
response := repositories.BuildTagResponse(tag)
utils.Success(c, response)
}
// 获取标签列表 (Admin)
func AdminGetTags(c *gin.Context) {
// 从数据库获取所有标签
tags, err := repositories.GetTags()
if err != nil {
utils.ServerError(c, err)
return
}
utils.Success(c, repositories.BuildTagsResponse(tags))
}
// 创建标签
func AdminCreateTag(c *gin.Context) {
var tag models.Tag
if err := c.ShouldBindJSON(&tag); err != nil {
utils.Error(c, 400, "Invalid request")
return
}
// 创建标签
if err := repositories.CreateTag(&tag); err != nil {
utils.ServerError(c, err)
return
}
utils.SuccessWithMsg(c, "Tag created successfully", nil)
}
// 更新标签
func AdminUpdateTag(c *gin.Context) {
tagID := c.Param("id")
var tag models.Tag
if err := c.ShouldBindJSON(&tag); err != nil {
utils.Error(c, 400, "Invalid request")
return
}
// 转换标签ID为uint
var idUint uint
_, err := fmt.Sscanf(tagID, "%d", &idUint)
if err != nil {
utils.Error(c, 400, "Invalid tag ID")
return
}
// 设置标签ID
tag.ID = idUint
// 更新标签
if err := repositories.UpdateTag(&tag); err != nil {
utils.ServerError(c, err)
return
}
utils.SuccessWithMsg(c, "Tag updated successfully", nil)
}
// 删除标签
func AdminDeleteTag(c *gin.Context) {
tagID := c.Param("id")
// 转换标签ID为uint
var idUint uint
_, err := fmt.Sscanf(tagID, "%d", &idUint)
if err != nil {
utils.Error(c, 400, "Invalid tag ID")
return
}
// 删除标签
if err := repositories.DeleteTag(idUint); err != nil {
utils.ServerError(c, err)
return
}
utils.SuccessWithMsg(c, "Tag deleted successfully", nil)
}