From e9e8638f1889daaff159427d48c7ef94e13ff707 Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Fri, 1 May 2020 00:55:24 +0200 Subject: [PATCH] Return issue subscription status from API subscribe (#10966) * [API] issue subscription indicate by http status * CI.restart() --- integrations/api_issue_subscription_test.go | 8 ++++++++ routers/api/v1/repo/issue_subscription.go | 21 +++++++++++++++++++-- templates/swagger/v1_json.tmpl | 10 ++++++++-- 3 files changed, 35 insertions(+), 4 deletions(-) diff --git a/integrations/api_issue_subscription_test.go b/integrations/api_issue_subscription_test.go index 5d2956c4e0..d0b1921015 100644 --- a/integrations/api_issue_subscription_test.go +++ b/integrations/api_issue_subscription_test.go @@ -58,9 +58,17 @@ func TestAPIIssueSubscriptions(t *testing.T) { session.MakeRequest(t, req, http.StatusCreated) testSubscription(issue1, false) + req = NewRequest(t, "DELETE", urlStr) + session.MakeRequest(t, req, http.StatusOK) + testSubscription(issue1, false) + issue5Repo := models.AssertExistsAndLoadBean(t, &models.Repository{ID: issue5.RepoID}).(*models.Repository) urlStr = fmt.Sprintf("/api/v1/repos/%s/%s/issues/%d/subscriptions/%s?token=%s", issue5Repo.OwnerName, issue5Repo.Name, issue5.Index, owner.Name, token) req = NewRequest(t, "PUT", urlStr) session.MakeRequest(t, req, http.StatusCreated) testSubscription(issue5, true) + + req = NewRequest(t, "PUT", urlStr) + session.MakeRequest(t, req, http.StatusOK) + testSubscription(issue5, true) } diff --git a/routers/api/v1/repo/issue_subscription.go b/routers/api/v1/repo/issue_subscription.go index 999dda1738..dfccbde64e 100644 --- a/routers/api/v1/repo/issue_subscription.go +++ b/routers/api/v1/repo/issue_subscription.go @@ -45,8 +45,10 @@ func AddIssueSubscription(ctx *context.APIContext) { // type: string // required: true // responses: + // "200": + // description: Already subscribed // "201": - // "$ref": "#/responses/empty" + // description: Successfully Subscribed // "304": // description: User can only subscribe itself if he is no admin // "404": @@ -87,8 +89,10 @@ func DelIssueSubscription(ctx *context.APIContext) { // type: string // required: true // responses: + // "200": + // description: Already unsubscribed // "201": - // "$ref": "#/responses/empty" + // description: Successfully Unsubscribed // "304": // description: User can only subscribe itself if he is no admin // "404": @@ -126,6 +130,19 @@ func setIssueSubscription(ctx *context.APIContext, watch bool) { return } + current, err := models.CheckIssueWatch(user, issue) + if err != nil { + ctx.Error(http.StatusInternalServerError, "CheckIssueWatch", err) + return + } + + // If watch state wont change + if current == watch { + ctx.Status(http.StatusOK) + return + } + + // Update watch state if err := models.CreateOrUpdateIssueWatch(user.ID, issue.ID, watch); err != nil { ctx.Error(http.StatusInternalServerError, "CreateOrUpdateIssueWatch", err) return diff --git a/templates/swagger/v1_json.tmpl b/templates/swagger/v1_json.tmpl index edcc5fd37a..b6a9085be5 100644 --- a/templates/swagger/v1_json.tmpl +++ b/templates/swagger/v1_json.tmpl @@ -5315,8 +5315,11 @@ } ], "responses": { + "200": { + "description": "Already subscribed" + }, "201": { - "$ref": "#/responses/empty" + "description": "Successfully Subscribed" }, "304": { "description": "User can only subscribe itself if he is no admin" @@ -5370,8 +5373,11 @@ } ], "responses": { + "200": { + "description": "Already unsubscribed" + }, "201": { - "$ref": "#/responses/empty" + "description": "Successfully Unsubscribed" }, "304": { "description": "User can only subscribe itself if he is no admin"