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

169 lines
3.6 KiB
Go

package handlers
import (
"strconv"
"github.com/gin-gonic/gin"
"github.com/niangaodev/art-code/models"
"github.com/niangaodev/art-code/repositories"
"github.com/niangaodev/art-code/utils"
)
// GetColumns 获取所有专栏
func GetColumns(c *gin.Context) {
columns, err := repositories.GetColumns()
if err != nil {
utils.ServerError(c, err)
return
}
utils.Success(c, columns)
}
// GetColumnByID 根据ID获取专栏
func GetColumnByID(c *gin.Context) {
idStr := c.Param("id")
id, err := strconv.ParseUint(idStr, 10, 32)
if err != nil {
utils.Error(c, 400, "Invalid column ID")
return
}
col, err := repositories.GetColumnByID(uint(id))
if err != nil {
utils.ServerError(c, err)
return
}
if col == nil {
utils.Error(c, 404, "Column not found")
return
}
utils.Success(c, col)
}
// GetColumnPosts 获取专栏文章
func GetColumnPosts(c *gin.Context) {
idStr := c.Param("id")
id, err := strconv.ParseUint(idStr, 10, 32)
if err != nil {
utils.Error(c, 400, "Invalid column ID")
return
}
posts, err := repositories.GetPostsByColumnID(uint(id))
if err != nil {
utils.ServerError(c, err)
return
}
// 使用 BuildPostsResponse 转换格式
utils.Success(c, repositories.BuildPostsResponse(posts))
}
// AdminCreateColumn 创建专栏
func AdminCreateColumn(c *gin.Context) {
var col models.Column
if err := c.ShouldBindJSON(&col); err != nil {
utils.Error(c, 400, err.Error())
return
}
if err := repositories.CreateColumn(&col); err != nil {
utils.ServerError(c, err)
return
}
utils.Success(c, col)
}
// AdminUpdateColumn 更新专栏
func AdminUpdateColumn(c *gin.Context) {
idStr := c.Param("id")
id, err := strconv.ParseUint(idStr, 10, 32)
if err != nil {
utils.Error(c, 400, "Invalid column ID")
return
}
var col models.Column
if err := c.ShouldBindJSON(&col); err != nil {
utils.Error(c, 400, err.Error())
return
}
col.ID = uint(id)
if err := repositories.UpdateColumn(&col); err != nil {
utils.ServerError(c, err)
return
}
utils.Success(c, col)
}
// AdminDeleteColumn 删除专栏
func AdminDeleteColumn(c *gin.Context) {
idStr := c.Param("id")
id, err := strconv.ParseUint(idStr, 10, 32)
if err != nil {
utils.Error(c, 400, "Invalid column ID")
return
}
if err := repositories.DeleteColumn(uint(id)); err != nil {
utils.ServerError(c, err)
return
}
utils.SuccessWithMsg(c, "Column deleted successfully", nil)
}
// AdminAddPostToColumn 添加文章到专栏
func AdminAddPostToColumn(c *gin.Context) {
idStr := c.Param("id")
columnID, err := strconv.ParseUint(idStr, 10, 32)
if err != nil {
utils.Error(c, 400, "Invalid column ID")
return
}
var req struct {
PostID uint `json:"postId"`
SortOrder uint `json:"sortOrder"`
}
if err := c.ShouldBindJSON(&req); err != nil {
utils.Error(c, 400, err.Error())
return
}
if err := repositories.AddPostToColumn(uint(columnID), req.PostID, req.SortOrder); err != nil {
utils.ServerError(c, err)
return
}
utils.SuccessWithMsg(c, "Post added to column successfully", nil)
}
// AdminRemovePostFromColumn 从专栏移除文章
func AdminRemovePostFromColumn(c *gin.Context) {
idStr := c.Param("id")
columnID, err := strconv.ParseUint(idStr, 10, 32)
if err != nil {
utils.Error(c, 400, "Invalid column ID")
return
}
postIDStr := c.Param("postId")
postID, err := strconv.ParseUint(postIDStr, 10, 32)
if err != nil {
utils.Error(c, 400, "Invalid post ID")
return
}
if err := repositories.RemovePostFromColumn(uint(columnID), uint(postID)); err != nil {
utils.ServerError(c, err)
return
}
utils.SuccessWithMsg(c, "Post removed from column successfully", nil)
}