BigW Consortium Gitlab

boards.rb 2.1 KB
Newer Older
Robert Schilling committed
1 2 3 4 5 6 7 8
module API
  module V3
    class Boards < Grape::API
      before { authenticate! }

      params do
        requires :id, type: String, desc: 'The ID of a project'
      end
9
      resource :projects, requirements: { id: %r{[^/]+} } do
Robert Schilling committed
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
        desc 'Get all project boards' do
          detail 'This feature was introduced in 8.13'
          success ::API::Entities::Board
        end
        get ':id/boards' do
          authorize!(:read_board, user_project)
          present user_project.boards, with: ::API::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.boards.first

              if params[:board_id] == board.id
                board
              else
                not_found!('Board')
              end
            end

            def board_lists
              project_board.lists.destroyable
            end
          end

          desc 'Get the lists of a project board' do
            detail 'Does not include `done` list. This feature was introduced in 8.13'
            success ::API::Entities::List
          end
          get '/lists' do
            authorize!(:read_board, user_project)
            present board_lists, with: ::API::Entities::List
          end
Robert Schilling committed
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67

          desc 'Delete a board list' do
            detail 'This feature was introduced in 8.13'
            success ::API::Entities::List
          end
          params do
            requires :list_id, type: Integer, desc: 'The ID of a board list'
          end
          delete "/lists/:list_id" do
            authorize!(:admin_list, user_project)

            list = board_lists.find(params[:list_id])

            service = ::Boards::Lists::DestroyService.new(user_project, current_user)

            if service.execute(list)
              present list, with: ::API::Entities::List
            else
              render_api_error!({ error: 'List could not be deleted!' }, 400)
            end
          end
Robert Schilling committed
68 69 70 71 72
        end
      end
    end
  end
end