diff --git a/pkg/models/task_relation.go b/pkg/models/task_relation.go index 75dbfc6046..9f787405bf 100644 --- a/pkg/models/task_relation.go +++ b/pkg/models/task_relation.go @@ -81,9 +81,9 @@ type TaskRelation struct { // The ID of the "base" task, the task which has a relation to another. TaskID int64 `xorm:"bigint not null" json:"task_id" param:"task"` // The ID of the other task, the task which is being related. - OtherTaskID int64 `xorm:"bigint not null" json:"other_task_id"` + OtherTaskID int64 `xorm:"bigint not null" json:"other_task_id" param:"otherTask"` // The kind of the relation. - RelationKind RelationKind `xorm:"varchar(50) not null" json:"relation_kind"` + RelationKind RelationKind `xorm:"varchar(50) not null" json:"relation_kind" param:"relationKind"` CreatedByID int64 `xorm:"bigint not null" json:"-"` // The user who created this relation @@ -196,16 +196,18 @@ func (rel *TaskRelation) Create(s *xorm.Session, a web.Auth) error { // @Security JWTKeyAuth // @Param relation body models.TaskRelation true "The relation object" // @Param taskID path int true "Task ID" +// @Param relationKind path string true "The kind of the relation. See the TaskRelation type for more info." +// @Param otherTaskID path int true "The id of the other task." // @Success 200 {object} models.Message "The task relation was successfully deleted." // @Failure 400 {object} web.HTTPError "Invalid task relation object provided." // @Failure 404 {object} web.HTTPError "The task relation was not found." // @Failure 500 {object} models.Message "Internal error" -// @Router /tasks/{taskID}/relations [delete] +// @Router /tasks/{taskID}/relations/{relationKind}/{otherTaskId} [delete] func (rel *TaskRelation) Delete(s *xorm.Session, a web.Auth) error { // Check if the relation exists exists, err := s. - Cols("task_id", "other_task_id", "relation_kind"). - Get(rel) + Where("task_id = ? AND other_task_id = ? AND relation_kind = ?", rel.TaskID, rel.OtherTaskID, rel.RelationKind). + Exist(&TaskRelation{}) if err != nil { return err } diff --git a/pkg/routes/routes.go b/pkg/routes/routes.go index 3a76132a3b..63f7b28b41 100644 --- a/pkg/routes/routes.go +++ b/pkg/routes/routes.go @@ -392,7 +392,7 @@ func registerAPIRoutes(a *echo.Group) { }, } a.PUT("/tasks/:task/relations", taskRelationHandler.CreateWeb) - a.DELETE("/tasks/:task/relations", taskRelationHandler.DeleteWeb) + a.DELETE("/tasks/:task/relations/:relationKind/:otherTask", taskRelationHandler.DeleteWeb) if config.ServiceEnableTaskAttachments.GetBool() { taskAttachmentHandler := &handler.WebHandler{ diff --git a/pkg/swagger/docs.go b/pkg/swagger/docs.go index 193215a060..177120579a 100644 --- a/pkg/swagger/docs.go +++ b/pkg/swagger/docs.go @@ -5313,7 +5313,9 @@ var doc = `{ } } } - }, + } + }, + "/tasks/{taskID}/relations/{relationKind}/{otherTaskId}": { "delete": { "security": [ { @@ -5346,6 +5348,20 @@ var doc = `{ "name": "taskID", "in": "path", "required": true + }, + { + "type": "string", + "description": "The kind of the relation. See the TaskRelation type for more info.", + "name": "relationKind", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "The id of the other task.", + "name": "otherTaskID", + "in": "path", + "required": true } ], "responses": { diff --git a/pkg/swagger/swagger.json b/pkg/swagger/swagger.json index 5aa7740281..6ac22ecc1f 100644 --- a/pkg/swagger/swagger.json +++ b/pkg/swagger/swagger.json @@ -5296,7 +5296,9 @@ } } } - }, + } + }, + "/tasks/{taskID}/relations/{relationKind}/{otherTaskId}": { "delete": { "security": [ { @@ -5329,6 +5331,20 @@ "name": "taskID", "in": "path", "required": true + }, + { + "type": "string", + "description": "The kind of the relation. See the TaskRelation type for more info.", + "name": "relationKind", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "The id of the other task.", + "name": "otherTaskID", + "in": "path", + "required": true } ], "responses": { diff --git a/pkg/swagger/swagger.yaml b/pkg/swagger/swagger.yaml index 959c2a61ab..98bf1b8276 100644 --- a/pkg/swagger/swagger.yaml +++ b/pkg/swagger/swagger.yaml @@ -4542,45 +4542,6 @@ paths: tags: - labels /tasks/{taskID}/relations: - delete: - consumes: - - application/json - parameters: - - description: The relation object - in: body - name: relation - required: true - schema: - $ref: '#/definitions/models.TaskRelation' - - description: Task ID - in: path - name: taskID - required: true - type: integer - produces: - - application/json - responses: - "200": - description: The task relation was successfully deleted. - schema: - $ref: '#/definitions/models.Message' - "400": - description: Invalid task relation object provided. - schema: - $ref: '#/definitions/web.HTTPError' - "404": - description: The task relation was not found. - schema: - $ref: '#/definitions/web.HTTPError' - "500": - description: Internal error - schema: - $ref: '#/definitions/models.Message' - security: - - JWTKeyAuth: [] - summary: Remove a task relation - tags: - - task put: consumes: - application/json @@ -4617,6 +4578,56 @@ paths: summary: Create a new relation between two tasks tags: - task + /tasks/{taskID}/relations/{relationKind}/{otherTaskId}: + delete: + consumes: + - application/json + parameters: + - description: The relation object + in: body + name: relation + required: true + schema: + $ref: '#/definitions/models.TaskRelation' + - description: Task ID + in: path + name: taskID + required: true + type: integer + - description: The kind of the relation. See the TaskRelation type for more info. + in: path + name: relationKind + required: true + type: string + - description: The id of the other task. + in: path + name: otherTaskID + required: true + type: integer + produces: + - application/json + responses: + "200": + description: The task relation was successfully deleted. + schema: + $ref: '#/definitions/models.Message' + "400": + description: Invalid task relation object provided. + schema: + $ref: '#/definitions/web.HTTPError' + "404": + description: The task relation was not found. + schema: + $ref: '#/definitions/web.HTTPError' + "500": + description: Internal error + schema: + $ref: '#/definitions/models.Message' + security: + - JWTKeyAuth: [] + summary: Remove a task relation + tags: + - task /tasks/all: get: consumes: