102 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			102 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
| # frozen_string_literal: true
 | |
| 
 | |
| module API
 | |
|   module BoardsResponses
 | |
|     extend ActiveSupport::Concern
 | |
| 
 | |
|     included do
 | |
|       helpers do
 | |
|         def board
 | |
|           board_parent.boards.find(params[:board_id])
 | |
|         end
 | |
| 
 | |
|         def create_board
 | |
|           forbidden! unless board_parent.multiple_issue_boards_available?
 | |
| 
 | |
|           response =
 | |
|             ::Boards::CreateService.new(board_parent, current_user, { name: params[:name] }).execute
 | |
| 
 | |
|           present response.payload, with: Entities::Board
 | |
|         end
 | |
| 
 | |
|         def update_board
 | |
|           service = ::Boards::UpdateService.new(board_parent, current_user, declared_params(include_missing: false))
 | |
|           service.execute(board)
 | |
| 
 | |
|           if board.valid?
 | |
|             present board, with: Entities::Board
 | |
|           else
 | |
|             bad_request!("Failed to save board #{board.errors.messages}")
 | |
|           end
 | |
|         end
 | |
| 
 | |
|         def delete_board
 | |
|           forbidden! unless board_parent.multiple_issue_boards_available?
 | |
| 
 | |
|           destroy_conditionally!(board) do |board|
 | |
|             service = ::Boards::DestroyService.new(board_parent, current_user)
 | |
|             service.execute(board)
 | |
|           end
 | |
|         end
 | |
| 
 | |
|         def board_lists
 | |
|           board.destroyable_lists
 | |
|         end
 | |
| 
 | |
|         def create_list
 | |
|           create_list_service =
 | |
|             ::Boards::Lists::CreateService.new(board_parent, current_user, declared_params.compact.with_indifferent_access)
 | |
| 
 | |
|           response = create_list_service.execute(board)
 | |
| 
 | |
|           if response.success?
 | |
|             present response.payload[:list], with: Entities::List
 | |
|           else
 | |
|             render_api_error!({ error: response.errors.first }, 400)
 | |
|           end
 | |
|         end
 | |
| 
 | |
|         def move_list(list)
 | |
|           move_list_service =
 | |
|             ::Boards::Lists::MoveService.new(board_parent, current_user, { position: params[:position].to_i })
 | |
| 
 | |
|           if move_list_service.execute(list)
 | |
|             present list, with: Entities::List
 | |
|           else
 | |
|             render_api_error!({ error: "List could not be moved!" }, 400)
 | |
|           end
 | |
|         end
 | |
| 
 | |
|         def destroy_list(list)
 | |
|           destroy_conditionally!(list) do |list|
 | |
|             service = ::Boards::Lists::DestroyService.new(board_parent, current_user)
 | |
|             if service.execute(list).error?
 | |
|               render_api_error!({ error: 'List could not be deleted!' }, 400)
 | |
|             end
 | |
|           end
 | |
|         end
 | |
| 
 | |
|         params :list_creation_params do
 | |
|           requires :label_id, type: Integer, desc: 'The ID of an existing label'
 | |
|         end
 | |
| 
 | |
|         params :update_params_ce do
 | |
|           optional :name, type: String, desc: 'The board name'
 | |
|           optional :hide_backlog_list, type: Grape::API::Boolean, desc: 'Hide the Open list'
 | |
|           optional :hide_closed_list, type: Grape::API::Boolean, desc: 'Hide the Closed list'
 | |
|         end
 | |
| 
 | |
|         params :update_params_ee do
 | |
|           # Configurable issue boards are not available in CE/EE Core.
 | |
|           # https://docs.gitlab.com/ee/user/project/issue_board.html#configurable-issue-boards
 | |
|         end
 | |
| 
 | |
|         params :update_params do
 | |
|           use :update_params_ce
 | |
|           use :update_params_ee
 | |
|         end
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| end
 |