Class: WorkItems::ClosingMergeRequests::CreateService

Inherits:
Object
  • Object
show all
Defined in:
app/services/work_items/closing_merge_requests/create_service.rb

Constant Summary collapse

ResourceNotAvailable =
Class.new(StandardError)

Instance Method Summary collapse

Constructor Details

#initialize(current_user:, work_item:, merge_request_reference:, namespace_path: nil) ⇒ CreateService

Returns a new instance of CreateService.



8
9
10
11
12
13
# File 'app/services/work_items/closing_merge_requests/create_service.rb', line 8

def initialize(current_user:, work_item:, merge_request_reference:, namespace_path: nil)
  @current_user = current_user
  @work_item = work_item
  @merge_request_reference = merge_request_reference
  @namespace_path = namespace_path
end

Instance Method Details

#executeObject



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'app/services/work_items/closing_merge_requests/create_service.rb', line 15

def execute
  raise ResourceNotAvailable, 'Cannot update work item' unless @current_user.can?(:update_work_item, @work_item)

  if @work_item.get_widget(:development).blank?
    return ServiceResponse.error(message: _('Development widget is not enabled for this work item type'))
  end

  merge_request = merge_request_from_reference
  raise ResourceNotAvailable, 'Merge request not available' if merge_request.blank?

  mr_closing_issue = MergeRequestsClosingIssues.new(
    merge_request: merge_request,
    issue_id: @work_item.id,
    from_mr_description: false
  )

  if mr_closing_issue.save
    GraphqlTriggers.work_item_updated(@work_item)

    ServiceResponse.success(payload: { merge_request_closing_issue: mr_closing_issue })
  else
    ServiceResponse.error(message: mr_closing_issue.errors.full_messages)
  end
end