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) }