diff options
| author | Lin Jen-Shin <godfat@godfat.org> | 2016-10-14 11:31:10 +0000 |
|---|---|---|
| committer | Lin Jen-Shin <godfat@godfat.org> | 2016-10-14 11:31:10 +0000 |
| commit | dc1d269f67f63eab5f358306ce394b5831377bf7 (patch) | |
| tree | 2fb75d51a54d6b19e783c11cf12942d7a67cf8db /lib/api/boards.rb | |
| parent | b5f9d4c4bc48b252d3175432a3bb6fb1ca394af9 (diff) | |
| parent | ca3bef554b14ddd2a0d844cd64874885e3f4e90e (diff) | |
| download | gitlab-ce-dc1d269f67f63eab5f358306ce394b5831377bf7.tar.gz | |
Merge remote-tracking branch 'upstream/master' into pipeline-emails
* upstream/master: (237 commits)
Grapify boards API
Add test, fix merge error
Use local assigns to get the dropdown title
Updated issuable dropdown titles
Added safety check for formatted values
Minor style improvement
Fixed conflict and corrected teaspoon test
Rename method in test
Moved ci_status environments logic to new action ci_envrionments_status and set up frontend polling
Refactor ci_status on MergeRequestController
Fix indenting error in HAML
Show what time ago a MR was deployed
Fixed missing links
Fixed missing links
Refactor merge requests revisions
Add link to update docs for source installations
Grapify todos API
Link to review apps example from docs
fix grafana_configuration.md move link
Do not run before_script, artifacts, cache in trigger_docs job
...
Diffstat (limited to 'lib/api/boards.rb')
| -rw-r--r-- | lib/api/boards.rb | 105 |
1 files changed, 61 insertions, 44 deletions
diff --git a/lib/api/boards.rb b/lib/api/boards.rb index 4d5d144a02e..b14dd4f6e83 100644 --- a/lib/api/boards.rb +++ b/lib/api/boards.rb @@ -3,18 +3,28 @@ module API class Boards < Grape::API before { authenticate! } + params do + requires :id, type: String, desc: 'The ID of a project' + end resource :projects do - # Get the project board + desc 'Get all project boards' do + detail 'This feature was introduced in 8.13' + success Entities::Board + end get ':id/boards' do authorize!(:read_board, user_project) - present [user_project.board], with: Entities::Board + present user_project.boards, with: Entities::Board end + params do + requires :board_id, type: Integer, desc: 'The ID of a board' + end segment ':id/boards/:board_id' do helpers do def project_board - board = user_project.board - if params[:board_id].to_i == board.id + board = user_project.boards.first + + if params[:board_id] == board.id board else not_found!('Board') @@ -26,37 +36,45 @@ module API end end - # Get the lists of a project board - # Does not include `backlog` and `done` lists + desc 'Get the lists of a project board' do + detail 'Does not include `backlog` and `done` lists. This feature was introduced in 8.13' + success Entities::List + end get '/lists' do authorize!(:read_board, user_project) present board_lists, with: Entities::List end - # Get a list of a project board + desc 'Get a list of a project board' do + detail 'This feature was introduced in 8.13' + success Entities::List + end + params do + requires :list_id, type: Integer, desc: 'The ID of a list' + end get '/lists/:list_id' do authorize!(:read_board, user_project) present board_lists.find(params[:list_id]), with: Entities::List end - # Create a new board list - # - # Parameters: - # id (required) - The ID of a project - # label_id (required) - The ID of an existing label - # Example Request: - # POST /projects/:id/boards/:board_id/lists + desc 'Create a new board list' do + detail 'This feature was introduced in 8.13' + success Entities::List + end + params do + requires :label_id, type: Integer, desc: 'The ID of an existing label' + end post '/lists' do - required_attributes! [:label_id] - unless user_project.labels.exists?(params[:label_id]) render_api_error!({ error: "Label not found!" }, 400) end authorize!(:admin_list, user_project) - list = ::Boards::Lists::CreateService.new(user_project, current_user, - { label_id: params[:label_id] }).execute + service = ::Boards::Lists::CreateService.new(user_project, current_user, + { label_id: params[:label_id] }) + + list = service.execute(project_board) if list.valid? present list, with: Entities::List @@ -65,48 +83,47 @@ module API end end - # Moves a board list to a new position - # - # Parameters: - # id (required) - The ID of a project - # board_id (required) - The ID of a board - # position (required) - The position of the list - # Example Request: - # PUT /projects/:id/boards/:board_id/lists/:list_id + desc 'Moves a board list to a new position' do + detail 'This feature was introduced in 8.13' + success Entities::List + end + params do + requires :list_id, type: Integer, desc: 'The ID of a list' + requires :position, type: Integer, desc: 'The position of the list' + end put '/lists/:list_id' do list = project_board.lists.movable.find(params[:list_id]) authorize!(:admin_list, user_project) - moved = ::Boards::Lists::MoveService.new(user_project, current_user, - { position: params[:position].to_i }).execute(list) + service = ::Boards::Lists::MoveService.new(user_project, current_user, + { position: params[:position] }) - if moved + if service.execute(list) present list, with: Entities::List else render_api_error!({ error: "List could not be moved!" }, 400) end end - # Delete a board list - # - # Parameters: - # id (required) - The ID of a project - # board_id (required) - The ID of a board - # list_id (required) - The ID of a board list - # Example Request: - # DELETE /projects/:id/boards/:board_id/lists/:list_id + desc 'Delete a board list' do + detail 'This feature was introduced in 8.13' + success Entities::List + end + params do + requires :list_id, type: Integer, desc: 'The ID of a board list' + end delete "/lists/:list_id" do - list = board_lists.find_by(id: params[:list_id]) - authorize!(:admin_list, user_project) - if list - destroyed_list = ::Boards::Lists::DestroyService.new( - user_project, current_user).execute(list) - present destroyed_list, with: Entities::List + list = board_lists.find(params[:list_id]) + + service = ::Boards::Lists::DestroyService.new(user_project, current_user) + + if service.execute(list) + present list, with: Entities::List else - not_found!('List') + render_api_error!({ error: 'List could not be deleted!' }, 400) end end end |
