Class: Observability::AccessRequestService

Inherits:
BaseService
  • Object
show all
Includes:
Services::ReturnServiceResponses
Defined in:
app/services/observability/access_request_service.rb

Constant Summary collapse

DEPLOYER_PROJECT_ID =
71877027

Constants inherited from BaseService

BaseService::UnauthorizedError

Instance Attribute Summary

Attributes inherited from BaseService

#project

Instance Method Summary collapse

Methods included from Services::ReturnServiceResponses

#error, #success

Methods included from BaseServiceUtility

#deny_visibility_level, #event_service, #log_error, #log_info, #notification_service, #system_hook_service, #todo_service, #visibility_level

Methods included from Gitlab::Allowable

#can?, #can_all?, #can_any?

Constructor Details

#initialize(group, current_user) ⇒ AccessRequestService

Returns a new instance of AccessRequestService.



9
10
11
12
# File 'app/services/observability/access_request_service.rb', line 9

def initialize(group, current_user)
  @group = group
  @current_user = current_user
end

Instance Method Details

#executeObject



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
# File 'app/services/observability/access_request_service.rb', line 14

def execute
  return error(s_('Observability|Group is required'), :bad_request) unless @group
  return error(s_('Observability|User is required'), :bad_request) unless @current_user

  unless authorized?
    return error(s_('Observability|You are not authorized to request observability access'),
      :forbidden)
  end

  project = project_for_observability_access_requests
  return error(s_('Observability|Project not found'), :not_found) unless project

  existing_issue = existing_issue?(project)
  return success(issue: existing_issue) if existing_issue

  issue_params = build_issue_params

  result = Issues::CreateService.new(
    container: project,
    current_user: Users::Internal.admin_bot,
    params: issue_params
  ).execute

  if result.success?
    success(issue: result[:issue])
  else
    error_message = result.errors.is_a?(Array) ? result.errors.join(', ') : result.errors.to_s
    error(error_message, :unprocessable_entity)
  end
end