61 lines
2.2 KiB
Ruby
61 lines
2.2 KiB
Ruby
|
module API
|
||
|
class Subscriptions < Grape::API
|
||
|
before { authenticate! }
|
||
|
|
||
|
subscribable_types = {
|
||
|
'merge_request' => proc { |id| user_project.merge_requests.find(id) },
|
||
|
'merge_requests' => proc { |id| user_project.merge_requests.find(id) },
|
||
|
'issues' => proc { |id| find_project_issue(id) },
|
||
|
'labels' => proc { |id| find_project_label(id) },
|
||
|
}
|
||
|
|
||
|
resource :projects do
|
||
|
subscribable_types.each do |type, finder|
|
||
|
type_singularized = type.singularize
|
||
|
type_id_str = :"#{type_singularized}_id"
|
||
|
entity_class = Entities.const_get(type_singularized.camelcase)
|
||
|
|
||
|
# Subscribe to a resource
|
||
|
#
|
||
|
# Parameters:
|
||
|
# id (required) - The ID of a project
|
||
|
# subscribable_id (required) - The ID of a resource
|
||
|
# Example Request:
|
||
|
# POST /projects/:id/labels/:subscribable_id/subscription
|
||
|
# POST /projects/:id/issues/:subscribable_id/subscription
|
||
|
# POST /projects/:id/merge_requests/:subscribable_id/subscription
|
||
|
post ":id/#{type}/:#{type_id_str}/subscription" do
|
||
|
resource = instance_exec(params[type_id_str], &finder)
|
||
|
|
||
|
if resource.subscribed?(current_user)
|
||
|
not_modified!
|
||
|
else
|
||
|
resource.subscribe(current_user)
|
||
|
present resource, with: entity_class, current_user: current_user
|
||
|
end
|
||
|
end
|
||
|
|
||
|
# Unsubscribe from a resource
|
||
|
#
|
||
|
# Parameters:
|
||
|
# id (required) - The ID of a project
|
||
|
# subscribable_id (required) - The ID of a resource
|
||
|
# Example Request:
|
||
|
# DELETE /projects/:id/labels/:subscribable_id/subscription
|
||
|
# DELETE /projects/:id/issues/:subscribable_id/subscription
|
||
|
# DELETE /projects/:id/merge_requests/:subscribable_id/subscription
|
||
|
delete ":id/#{type}/:#{type_id_str}/subscription" do
|
||
|
resource = instance_exec(params[type_id_str], &finder)
|
||
|
|
||
|
if !resource.subscribed?(current_user)
|
||
|
not_modified!
|
||
|
else
|
||
|
resource.unsubscribe(current_user)
|
||
|
present resource, with: entity_class, current_user: current_user
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|