You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

79 lines
1.9 KiB

package task
import (
"net/http"
"strconv"
"time"
"task-track-backend/model"
"task-track-backend/pkg/database"
"github.com/gin-gonic/gin"
)
// AddTaskCommentRequest 添加任务评论请求结构
type AddTaskCommentRequest struct {
Content string `json:"content" binding:"required"`
UserID uint `json:"user_id" binding:"required"`
}
func (h *TaskHandler) AddTaskComment(c *gin.Context) {
// 获取任务ID
taskIDStr := c.Param("id")
taskID, err := strconv.ParseUint(taskIDStr, 10, 32)
if err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "无效的任务ID"})
return
}
var req AddTaskCommentRequest
if err := c.ShouldBindJSON(&req); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
db := database.GetDB()
// 检查任务是否存在
var existingTask model.Task
if err := db.First(&existingTask, uint(taskID)).Error; err != nil {
if err.Error() == "record not found" {
c.JSON(http.StatusNotFound, gin.H{"error": "任务不存在"})
return
}
c.JSON(http.StatusInternalServerError, gin.H{"error": "查询任务失败"})
return
}
// 检查用户是否存在
var user model.User
if err := db.First(&user, req.UserID).Error; err != nil {
if err.Error() == "record not found" {
c.JSON(http.StatusNotFound, gin.H{"error": "用户不存在"})
return
}
c.JSON(http.StatusInternalServerError, gin.H{"error": "查询用户失败"})
return
}
// 创建评论
comment := model.TaskComment{
TaskID: uint(taskID),
UserID: req.UserID,
Content: req.Content,
CreatedAt: time.Now(),
}
if err := db.Create(&comment).Error; err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "创建评论失败"})
return
}
// 预加载用户信息
if err := db.Preload("User").First(&comment, comment.ID).Error; err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "获取评论失败"})
return
}
c.JSON(http.StatusCreated, comment)
}