From c3b6383b3a91e476c5a6978a0fb355191271a51c Mon Sep 17 00:00:00 2001 From: Ethan Koenig Date: Sun, 19 Nov 2017 23:24:07 -0800 Subject: [PATCH] Fix comment API paths (#2813) --- integrations/api_comment_test.go | 8 +- public/swagger.v1.json | 271 ++++++++++++++++++--------- routers/api/v1/api.go | 7 +- routers/api/v1/repo/issue_comment.go | 86 ++++++++- 4 files changed, 278 insertions(+), 94 deletions(-) diff --git a/integrations/api_comment_test.go b/integrations/api_comment_test.go index 645afba18..423d0f798 100644 --- a/integrations/api_comment_test.go +++ b/integrations/api_comment_test.go @@ -93,8 +93,8 @@ func TestAPIEditComment(t *testing.T) { repoOwner := models.AssertExistsAndLoadBean(t, &models.User{ID: repo.OwnerID}).(*models.User) session := loginUser(t, repoOwner.Name) - urlStr := fmt.Sprintf("/api/v1/repos/%s/%s/issues/%d/comments/%d", - repoOwner.Name, repo.Name, issue.Index, comment.ID) + urlStr := fmt.Sprintf("/api/v1/repos/%s/%s/issues/comments/%d", + repoOwner.Name, repo.Name, comment.ID) req := NewRequestWithValues(t, "PATCH", urlStr, map[string]string{ "body": newCommentBody, }) @@ -117,8 +117,8 @@ func TestAPIDeleteComment(t *testing.T) { repoOwner := models.AssertExistsAndLoadBean(t, &models.User{ID: repo.OwnerID}).(*models.User) session := loginUser(t, repoOwner.Name) - req := NewRequestf(t, "DELETE", "/api/v1/repos/%s/%s/issues/%d/comments/%d", - repoOwner.Name, repo.Name, issue.Index, comment.ID) + req := NewRequestf(t, "DELETE", "/api/v1/repos/%s/%s/issues/comments/%d", + repoOwner.Name, repo.Name, comment.ID) session.MakeRequest(t, req, http.StatusNoContent) models.AssertNotExistsBean(t, &models.Comment{ID: comment.ID}) diff --git a/public/swagger.v1.json b/public/swagger.v1.json index 6072bfba3..730079c81 100644 --- a/public/swagger.v1.json +++ b/public/swagger.v1.json @@ -1225,91 +1225,6 @@ } } }, - "/repos/{owner}/{repo}/comments/{id}": { - "delete": { - "tags": [ - "issue" - ], - "summary": "Delete a comment", - "operationId": "issueDeleteComment", - "parameters": [ - { - "type": "string", - "description": "owner of the repo", - "name": "owner", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "name of the repo", - "name": "repo", - "in": "path", - "required": true - }, - { - "type": "integer", - "description": "id of comment to delete", - "name": "id", - "in": "path", - "required": true - } - ], - "responses": { - "204": { - "$ref": "#/responses/empty" - } - } - }, - "patch": { - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "issue" - ], - "summary": "Edit a comment", - "operationId": "issueEditComment", - "parameters": [ - { - "type": "string", - "description": "owner of the repo", - "name": "owner", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "name of the repo", - "name": "repo", - "in": "path", - "required": true - }, - { - "type": "integer", - "description": "id of the comment to edit", - "name": "id", - "in": "path", - "required": true - }, - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/EditIssueCommentOption" - } - } - ], - "responses": { - "200": { - "$ref": "#/responses/Comment" - } - } - } - }, "/repos/{owner}/{repo}/commits/{ref}/statuses": { "get": { "produces": [ @@ -1965,6 +1880,91 @@ } } }, + "/repos/{owner}/{repo}/issues/comments/{id}": { + "delete": { + "tags": [ + "issue" + ], + "summary": "Delete a comment", + "operationId": "issueDeleteComment", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "id of comment to delete", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + } + } + }, + "patch": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "Edit a comment", + "operationId": "issueEditComment", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "id of the comment to edit", + "name": "id", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/EditIssueCommentOption" + } + } + ], + "responses": { + "200": { + "$ref": "#/responses/Comment" + } + } + } + }, "/repos/{owner}/{repo}/issues/{id}": { "get": { "produces": [ @@ -2103,6 +2103,107 @@ } } }, + "/repos/{owner}/{repo}/issues/{index}/comments/{id}": { + "delete": { + "tags": [ + "issue" + ], + "summary": "Delete a comment", + "operationId": "issueDeleteCommentDeprecated", + "deprecated": true, + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "this parameter is ignored", + "name": "index", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "id of comment to delete", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + } + } + }, + "patch": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "Edit a comment", + "operationId": "issueEditCommentDeprecated", + "deprecated": true, + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "this parameter is ignored", + "name": "index", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "id of the comment to edit", + "name": "id", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/EditIssueCommentOption" + } + } + ], + "responses": { + "200": { + "$ref": "#/responses/Comment" + } + } + } + }, "/repos/{owner}/{repo}/issues/{index}/labels": { "get": { "produces": [ diff --git a/routers/api/v1/api.go b/routers/api/v1/api.go index b6e7df121..2aa27af09 100644 --- a/routers/api/v1/api.go +++ b/routers/api/v1/api.go @@ -406,7 +406,8 @@ func RegisterRoutes(m *macaron.Macaron) { m.Group("/comments", func() { m.Get("", repo.ListRepoIssueComments) m.Combo("/:id", reqToken()). - Patch(bind(api.EditIssueCommentOption{}), repo.EditIssueComment) + Patch(bind(api.EditIssueCommentOption{}), repo.EditIssueComment). + Delete(repo.DeleteIssueComment) }) m.Group("/:index", func() { m.Combo("").Get(repo.GetIssue). @@ -415,8 +416,8 @@ func RegisterRoutes(m *macaron.Macaron) { m.Group("/comments", func() { m.Combo("").Get(repo.ListIssueComments). Post(reqToken(), bind(api.CreateIssueCommentOption{}), repo.CreateIssueComment) - m.Combo("/:id", reqToken()).Patch(bind(api.EditIssueCommentOption{}), repo.EditIssueComment). - Delete(repo.DeleteIssueComment) + m.Combo("/:id", reqToken()).Patch(bind(api.EditIssueCommentOption{}), repo.EditIssueCommentDeprecated). + Delete(repo.DeleteIssueCommentDeprecated) }) m.Group("/labels", func() { diff --git a/routers/api/v1/repo/issue_comment.go b/routers/api/v1/repo/issue_comment.go index f0b0353d1..8abe2253a 100644 --- a/routers/api/v1/repo/issue_comment.go +++ b/routers/api/v1/repo/issue_comment.go @@ -168,7 +168,7 @@ func CreateIssueComment(ctx *context.APIContext, form api.CreateIssueCommentOpti // EditIssueComment modify a comment of an issue func EditIssueComment(ctx *context.APIContext, form api.EditIssueCommentOption) { - // swagger:operation PATCH /repos/{owner}/{repo}/comments/{id} issue issueEditComment + // swagger:operation PATCH /repos/{owner}/{repo}/issues/comments/{id} issue issueEditComment // --- // summary: Edit a comment // consumes: @@ -198,6 +198,51 @@ func EditIssueComment(ctx *context.APIContext, form api.EditIssueCommentOption) // responses: // "200": // "$ref": "#/responses/Comment" + editIssueComment(ctx, form) +} + +// EditIssueCommentDeprecated modify a comment of an issue +func EditIssueCommentDeprecated(ctx *context.APIContext, form api.EditIssueCommentOption) { + // swagger:operation PATCH /repos/{owner}/{repo}/issues/{index}/comments/{id} issue issueEditCommentDeprecated + // --- + // summary: Edit a comment + // deprecated: true + // consumes: + // - application/json + // produces: + // - application/json + // parameters: + // - name: owner + // in: path + // description: owner of the repo + // type: string + // required: true + // - name: repo + // in: path + // description: name of the repo + // type: string + // required: true + // - name: index + // in: path + // description: this parameter is ignored + // type: integer + // required: true + // - name: id + // in: path + // description: id of the comment to edit + // type: integer + // required: true + // - name: body + // in: body + // schema: + // "$ref": "#/definitions/EditIssueCommentOption" + // responses: + // "200": + // "$ref": "#/responses/Comment" + editIssueComment(ctx, form) +} + +func editIssueComment(ctx *context.APIContext, form api.EditIssueCommentOption) { comment, err := models.GetCommentByID(ctx.ParamsInt64(":id")) if err != nil { if models.IsErrCommentNotExist(err) { @@ -226,9 +271,37 @@ func EditIssueComment(ctx *context.APIContext, form api.EditIssueCommentOption) // DeleteIssueComment delete a comment from an issue func DeleteIssueComment(ctx *context.APIContext) { - // swagger:operation DELETE /repos/{owner}/{repo}/comments/{id} issue issueDeleteComment + // swagger:operation DELETE /repos/{owner}/{repo}/issues/comments/{id} issue issueDeleteComment + // --- + // summary: Delete a comment + // parameters: + // - name: owner + // in: path + // description: owner of the repo + // type: string + // required: true + // - name: repo + // in: path + // description: name of the repo + // type: string + // required: true + // - name: id + // in: path + // description: id of comment to delete + // type: integer + // required: true + // responses: + // "204": + // "$ref": "#/responses/empty" + deleteIssueComment(ctx) +} + +// DeleteIssueCommentDeprecated delete a comment from an issue +func DeleteIssueCommentDeprecated(ctx *context.APIContext) { + // swagger:operation DELETE /repos/{owner}/{repo}/issues/{index}/comments/{id} issue issueDeleteCommentDeprecated // --- // summary: Delete a comment + // deprecated: true // parameters: // - name: owner // in: path @@ -240,6 +313,11 @@ func DeleteIssueComment(ctx *context.APIContext) { // description: name of the repo // type: string // required: true + // - name: index + // in: path + // description: this parameter is ignored + // type: integer + // required: true // - name: id // in: path // description: id of comment to delete @@ -248,6 +326,10 @@ func DeleteIssueComment(ctx *context.APIContext) { // responses: // "204": // "$ref": "#/responses/empty" + deleteIssueComment(ctx) +} + +func deleteIssueComment(ctx *context.APIContext) { comment, err := models.GetCommentByID(ctx.ParamsInt64(":id")) if err != nil { if models.IsErrCommentNotExist(err) {