Grapify todos API

This commit is contained in:
Robert Schilling 2016-10-14 09:16:55 +02:00
parent 4b889dbb3c
commit b927473c45

View file

@ -8,18 +8,19 @@ module API
'issues' => ->(id) { find_project_issue(id) }
}
params do
requires :id, type: String, desc: 'The ID of a project'
end
resource :projects do
ISSUABLE_TYPES.each do |type, finder|
type_id_str = "#{type.singularize}_id".to_sym
# Create a todo on an issuable
#
# Parameters:
# id (required) - The ID of a project
# issuable_id (required) - The ID of an issuable
# Example Request:
# POST /projects/:id/issues/:issuable_id/todo
# POST /projects/:id/merge_requests/:issuable_id/todo
desc 'Create a todo on an issuable' do
success Entities::Todo
end
params do
requires type_id_str, type: Integer, desc: 'The ID of an issuable'
end
post ":id/#{type}/:#{type_id_str}/todo" do
issuable = instance_exec(params[type_id_str], &finder)
todo = TodoService.new.mark_todo(issuable, current_user).first
@ -40,25 +41,21 @@ module API
end
end
# Get a todo list
#
# Example Request:
# GET /todos
#
desc 'Get a todo list' do
success Entities::Todo
end
get do
todos = find_todos
present paginate(todos), with: Entities::Todo, current_user: current_user
end
# Mark a todo as done
#
# Parameters:
# id: (required) - The ID of the todo being marked as done
#
# Example Request:
# DELETE /todos/:id
#
desc 'Mark a todo as done' do
success Entities::Todo
end
params do
requires :id, type: Integer, desc: 'The ID of the todo being marked as done'
end
delete ':id' do
todo = current_user.todos.find(params[:id])
TodoService.new.mark_todos_as_done([todo], current_user)
@ -66,11 +63,7 @@ module API
present todo.reload, with: Entities::Todo, current_user: current_user
end
# Mark all todos as done
#
# Example Request:
# DELETE /todos
#
desc 'Mark all todos as done'
delete do
todos = find_todos
TodoService.new.mark_todos_as_done(todos, current_user)