169 lines
3.6 KiB
Go
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)
|
|
}
|