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.
 
 
 
 
 
 

107 lines
2.8 KiB

package task
import (
"net/http"
"time"
"task-track-backend/model"
"task-track-backend/pkg/database"
"github.com/gin-gonic/gin"
)
// CreateTaskRequest 创建任务请求结构
type CreateTaskRequest struct {
Title string `json:"title" binding:"required"`
Description string `json:"description"`
Type string `json:"type"`
Priority string `json:"priority"`
AssigneeID *uint `json:"assignee_id"`
StartTime *time.Time `json:"start_time"`
EndTime *time.Time `json:"end_time"`
OrganizationID uint `json:"organization_id" binding:"required"`
CreatorID uint `json:"creator_id" binding:"required"`
}
func (h *TaskHandler) CreateTask(c *gin.Context) {
var req CreateTaskRequest
if err := c.ShouldBindJSON(&req); err != nil {
c.JSON(http.StatusBadRequest, gin.H{
"code": 400,
"message": "请求参数错误: " + err.Error(),
})
return
}
// 验证优先级
if req.Priority != "" && req.Priority != "urgent" && req.Priority != "high" && req.Priority != "medium" && req.Priority != "low" {
c.JSON(http.StatusBadRequest, gin.H{
"code": 400,
"message": "优先级值无效,必须是 urgent、high、medium 或 low",
})
return
}
// 如果没有指定优先级,默认为 medium
if req.Priority == "" {
req.Priority = "medium"
}
// 验证时间逻辑
if req.StartTime != nil && req.EndTime != nil && req.StartTime.After(*req.EndTime) {
c.JSON(http.StatusBadRequest, gin.H{
"code": 400,
"message": "开始时间不能晚于结束时间",
})
return
}
// 创建任务对象
task := model.Task{
Title: req.Title,
Description: req.Description,
Type: req.Type,
Priority: req.Priority,
Status: "pending", // 默认状态
CreatorID: req.CreatorID,
OrganizationID: req.OrganizationID,
StartTime: req.StartTime,
EndTime: req.EndTime,
}
// 如果指定了执行者
if req.AssigneeID != nil {
task.AssigneeID = *req.AssigneeID
}
// 保存到数据库
db := database.GetDB()
if err := db.Create(&task).Error; err != nil {
c.JSON(http.StatusInternalServerError, gin.H{
"code": 500,
"message": "创建任务失败: " + err.Error(),
})
return
}
// 返回成功响应
c.JSON(http.StatusCreated, gin.H{
"code": 201,
"message": "任务创建成功",
"data": gin.H{
"id": task.ID,
"title": task.Title,
"description": task.Description,
"type": task.Type,
"priority": task.Priority,
"status": task.Status,
"creator_id": task.CreatorID,
"assignee_id": task.AssigneeID,
"organization_id": task.OrganizationID,
"start_time": task.StartTime,
"end_time": task.EndTime,
"created_at": task.CreatedAt,
"updated_at": task.UpdatedAt,
},
})
}