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