summaryrefslogtreecommitdiff
path: root/lib/api
diff options
context:
space:
mode:
authorRobert Schilling <rschilling@student.tugraz.at>2016-04-08 14:17:42 +0200
committerRobert Schilling <rschilling@student.tugraz.at>2016-04-13 13:45:00 +0200
commitbd0be13f5b52b8eaee019d722980b29acbc55b05 (patch)
tree44c9dee41f377a46fded808aa1a3332d7ccf39e7 /lib/api
parent861e685e1853d45dea83bc1d06ebd639b120f36c (diff)
downloadgitlab-ce-bd0be13f5b52b8eaee019d722980b29acbc55b05.tar.gz
API: Ability to subscribe and unsubscribe from an issue
Diffstat (limited to 'lib/api')
-rw-r--r--lib/api/helpers.rb4
-rw-r--r--lib/api/issues.rb53
2 files changed, 57 insertions, 0 deletions
diff --git a/lib/api/helpers.rb b/lib/api/helpers.rb
index 4921ae99e78..aa0597564ed 100644
--- a/lib/api/helpers.rb
+++ b/lib/api/helpers.rb
@@ -241,6 +241,10 @@ module API
render_api_error!('413 Request Entity Too Large', 413)
end
+ def not_modified!
+ render_api_error!('304 Not modified', 304)
+ end
+
def render_validation_error!(model)
if model.errors.any?
render_api_error!(model.errors.messages || '400 Bad Request', 400)
diff --git a/lib/api/issues.rb b/lib/api/issues.rb
index 850e99981ff..49911fa2988 100644
--- a/lib/api/issues.rb
+++ b/lib/api/issues.rb
@@ -231,6 +231,59 @@ module API
authorize!(:destroy_issue, issue)
issue.destroy
end
+
+ # Subscribes to a project issue
+ #
+ # Parameters:
+ # id (required) - The ID of a project
+ # issue_id (required) - The ID of a project issue
+ # Example Request:
+ # POST /projects/:id/issues/:issue_id
+ post ":id/issues/:issue_idsubscribe" do
+ issue = user_project.issues.find_by(id: params[:issue_id])
+
+ if !issue.subscribed?(current_user)
+ present issue, with: Entities::Issue, current_user: current_user
+ else
+ not_modified!
+ end
+ end
+
+ # Subscribes to a project issue
+ #
+ # Parameters:
+ # id (required) - The ID of a project
+ # issue_id (required) - The ID of a project issue
+ # Example Request:
+ # POST /projects/:id/issues/:issue_id/subscribe
+ post ":id/issues/:issue_id/subscribe" do
+ issue = user_project.issues.find_by(id: params[:issue_id])
+
+ if !issue.subscribed?(current_user)
+ issue.toggle_subscription(current_user)
+ present issue, with: Entities::Issue, current_user: current_user
+ else
+ not_modified!
+ end
+ end
+
+ # Unsubscribes from a project issue
+ #
+ # Parameters:
+ # id (required) - The ID of a project
+ # issue_id (required) - The ID of a project issue
+ # Example Request:
+ # POST /projects/:id/issues/:issue_id/unsubscribe
+ post ":id/issues/:issue_id/unsubscribe" do
+ issue = user_project.issues.find_by(id: params[:issue_id])
+
+ if issue.subscribed?(current_user)
+ issue.unsubscribe(current_user)
+ present issue, with: Entities::Issue, current_user: current_user
+ else
+ not_modified!
+ end
+ end
end
end
end