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.
66 lines
1.6 KiB
66 lines
1.6 KiB
package task
|
|
|
|
import (
|
|
"net/http"
|
|
"strconv"
|
|
|
|
"task-track-backend/model"
|
|
"task-track-backend/pkg/database"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
func (h *TaskHandler) DeleteTask(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
|
|
}
|
|
|
|
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
|
|
}
|
|
|
|
// 开始事务
|
|
tx := db.Begin()
|
|
|
|
// 删除相关的评论
|
|
if err := tx.Where("task_id = ?", taskID).Delete(&model.TaskComment{}).Error; err != nil {
|
|
tx.Rollback()
|
|
c.JSON(http.StatusInternalServerError, gin.H{"error": "删除任务评论失败"})
|
|
return
|
|
}
|
|
|
|
// 删除相关的附件
|
|
if err := tx.Where("task_id = ?", taskID).Delete(&model.TaskAttachment{}).Error; err != nil {
|
|
tx.Rollback()
|
|
c.JSON(http.StatusInternalServerError, gin.H{"error": "删除任务附件失败"})
|
|
return
|
|
}
|
|
|
|
// 删除任务
|
|
if err := tx.Delete(&existingTask).Error; err != nil {
|
|
tx.Rollback()
|
|
c.JSON(http.StatusInternalServerError, gin.H{"error": "删除任务失败"})
|
|
return
|
|
}
|
|
|
|
// 提交事务
|
|
if err := tx.Commit().Error; err != nil {
|
|
c.JSON(http.StatusInternalServerError, gin.H{"error": "提交事务失败"})
|
|
return
|
|
}
|
|
|
|
c.JSON(http.StatusOK, gin.H{"message": "任务删除成功"})
|
|
}
|
|
|