diff --git a/ee/app/services/incident_management/oncall_rotations/base_service.rb b/ee/app/services/incident_management/oncall_rotations/base_service.rb new file mode 100644 index 0000000000000000000000000000000000000000..2421e48388af6953421e58cb4271cb9901e1902f --- /dev/null +++ b/ee/app/services/incident_management/oncall_rotations/base_service.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +module IncidentManagement + module OncallRotations + class BaseService + def allowed? + user&.can?(:admin_incident_management_oncall_schedule, project) + end + + def available? + ::Gitlab::IncidentManagement.oncall_schedules_available?(project) + end + + def error(message) + ServiceResponse.error(message: message) + end + + def success(oncall_rotation) + ServiceResponse.success(payload: { oncall_rotation: oncall_rotation }) + end + + def error_no_license + error(_('Your license does not support on-call rotations')) + end + end + end +end diff --git a/ee/app/services/incident_management/oncall_rotations/create_service.rb b/ee/app/services/incident_management/oncall_rotations/create_service.rb index f818f44f4e189d11f6393cb10b56c808e0583b2d..66b95b2230445f1373ae8e780c5748f5b897fbf6 100644 --- a/ee/app/services/incident_management/oncall_rotations/create_service.rb +++ b/ee/app/services/incident_management/oncall_rotations/create_service.rb @@ -2,12 +2,12 @@ module IncidentManagement module OncallRotations - class CreateService + class CreateService < BaseService MAXIMUM_PARTICIPANTS = 100 # @param schedule [IncidentManagement::OncallSchedule] # @param project [Project] - # @param current_user [User] + # @param user [User] # @param params [Hash<Symbol,Any>] # @param params - name [String] The name of the on-call rotation. # @param params - length [Integer] The length of the rotation. @@ -17,10 +17,10 @@ class CreateService # @option opts - participant [User] The user who is part of the rotation # @option opts - color_palette [String] The color palette to assign to the on-call user, for example: "blue". # @option opts - color_weight [String] The color weight to assign to for the on-call user, for example "500". Max 4 chars. - def initialize(schedule, project, current_user, params) + def initialize(schedule, project, user, params) @schedule = schedule @project = project - @current_user = current_user + @user = user @rotation_params = params.except(:participants) @participants_params = Array(params[:participants]) end @@ -49,15 +49,7 @@ def execute private - attr_reader :schedule, :project, :current_user, :rotation_params, :participants_params - - def allowed? - Ability.allowed?(current_user, :admin_incident_management_oncall_schedule, project) - end - - def available? - ::Gitlab::IncidentManagement.oncall_schedules_available?(project) - end + attr_reader :schedule, :project, :user, :rotation_params, :participants_params def duplicated_users? users = participants_params.map { |participant| participant[:user] } @@ -98,14 +90,6 @@ def insert_participants(participants) OncallParticipant.insert_all(participant_rows(participants)) end - def error(message) - ServiceResponse.error(message: message) - end - - def success(oncall_rotation) - ServiceResponse.success(payload: { oncall_rotation: oncall_rotation }) - end - def error_participant_has_no_permission error('A participant has insufficient permissions to access the project') end @@ -122,10 +106,6 @@ def error_no_permissions error(_('You have insufficient permissions to create an on-call rotation for this project')) end - def error_no_license - error(_('Your license does not support on-call rotations')) - end - def error_in_validation(object) error(object.errors.full_messages.to_sentence) end diff --git a/ee/app/services/incident_management/oncall_rotations/destroy_service.rb b/ee/app/services/incident_management/oncall_rotations/destroy_service.rb index 3f89b9900544cb42d6fcdd042bc1435b749138db..83dc6893c9b044a2e0ca4fd1b2926e67b96b06dc 100644 --- a/ee/app/services/incident_management/oncall_rotations/destroy_service.rb +++ b/ee/app/services/incident_management/oncall_rotations/destroy_service.rb @@ -2,7 +2,7 @@ module IncidentManagement module OncallRotations - class DestroyService + class DestroyService < BaseService # @param oncall_schedule [IncidentManagement::OncallRotation] # @param user [User] def initialize(oncall_rotation, user) @@ -16,7 +16,7 @@ def execute return error_no_permissions unless allowed? if oncall_rotation.destroy - success + success(oncall_rotation) else error(oncall_rotation.errors.full_messages.to_sentence) end @@ -26,29 +26,9 @@ def execute attr_reader :oncall_rotation, :user, :project - def allowed? - user&.can?(:admin_incident_management_oncall_schedule, project) - end - - def available? - ::Gitlab::IncidentManagement.oncall_schedules_available?(project) - end - - def error(message) - ServiceResponse.error(message: message) - end - - def success - ServiceResponse.success(payload: { oncall_rotation: oncall_rotation }) - end - def error_no_permissions error(_('You have insufficient permissions to remove an on-call rotation from this project')) end - - def error_no_license - error(_('Your license does not support on-call rotations')) - end end end end diff --git a/ee/app/services/incident_management/oncall_schedules/base_service.rb b/ee/app/services/incident_management/oncall_schedules/base_service.rb new file mode 100644 index 0000000000000000000000000000000000000000..94a193afe7b00c013aeb982335fb8d65e42fd2f3 --- /dev/null +++ b/ee/app/services/incident_management/oncall_schedules/base_service.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +module IncidentManagement + module OncallSchedules + class BaseService + def allowed? + user&.can?(:admin_incident_management_oncall_schedule, project) + end + + def available? + ::Gitlab::IncidentManagement.oncall_schedules_available?(project) + end + + def error(message) + ServiceResponse.error(message: message) + end + + def success(oncall_schedule) + ServiceResponse.success(payload: { oncall_schedule: oncall_schedule }) + end + + def error_no_license + error(_('Your license does not support on-call schedules')) + end + end + end +end diff --git a/ee/app/services/incident_management/oncall_schedules/create_service.rb b/ee/app/services/incident_management/oncall_schedules/create_service.rb index 1abba374727fd455dfe9095c89f38a650161b5da..b03c2ee26da16ea7972787d00f502a9b3cd14d3d 100644 --- a/ee/app/services/incident_management/oncall_schedules/create_service.rb +++ b/ee/app/services/incident_management/oncall_schedules/create_service.rb @@ -2,7 +2,7 @@ module IncidentManagement module OncallSchedules - class CreateService + class CreateService < BaseService # @param project [Project] # @param user [User] # @param params [Hash] @@ -26,30 +26,10 @@ def execute attr_reader :project, :user, :params - def allowed? - user&.can?(:admin_incident_management_oncall_schedule, project) - end - - def available? - ::Gitlab::IncidentManagement.oncall_schedules_available?(project) - end - - def error(message) - ServiceResponse.error(message: message) - end - - def success(oncall_schedule) - ServiceResponse.success(payload: { oncall_schedule: oncall_schedule }) - end - def error_no_permissions error(_('You have insufficient permissions to create an on-call schedule for this project')) end - def error_no_license - error(_('Your license does not support on-call schedules')) - end - def error_in_create(oncall_schedule) error(oncall_schedule.errors.full_messages.to_sentence) end diff --git a/ee/app/services/incident_management/oncall_schedules/destroy_service.rb b/ee/app/services/incident_management/oncall_schedules/destroy_service.rb index d050268fc7405c8b09eec182570bc32c96b23275..d0b11cfb995a69bc6a328ab6a6f4aca736240ff2 100644 --- a/ee/app/services/incident_management/oncall_schedules/destroy_service.rb +++ b/ee/app/services/incident_management/oncall_schedules/destroy_service.rb @@ -2,7 +2,7 @@ module IncidentManagement module OncallSchedules - class DestroyService + class DestroyService < BaseService # @param oncall_schedule [IncidentManagement::OncallSchedule] # @param user [User] def initialize(oncall_schedule, user) @@ -16,7 +16,7 @@ def execute return error_no_permissions unless allowed? if oncall_schedule.destroy - success + success(oncall_schedule) else error(oncall_schedule.errors.full_messages.to_sentence) end @@ -26,29 +26,9 @@ def execute attr_reader :oncall_schedule, :user, :project - def allowed? - user&.can?(:admin_incident_management_oncall_schedule, project) - end - - def available? - ::Gitlab::IncidentManagement.oncall_schedules_available?(project) - end - - def error(message) - ServiceResponse.error(message: message) - end - - def success - ServiceResponse.success(payload: { oncall_schedule: oncall_schedule }) - end - def error_no_permissions error(_('You have insufficient permissions to remove an on-call schedule from this project')) end - - def error_no_license - error(_('Your license does not support on-call schedules')) - end end end end diff --git a/ee/app/services/incident_management/oncall_schedules/update_service.rb b/ee/app/services/incident_management/oncall_schedules/update_service.rb index 1ea78a5d9c89375ce0d1eb5ecaeeca21d7c0188e..bfb4e51126b2cc8837cb366ecbc353c8623e5fb4 100644 --- a/ee/app/services/incident_management/oncall_schedules/update_service.rb +++ b/ee/app/services/incident_management/oncall_schedules/update_service.rb @@ -2,7 +2,7 @@ module IncidentManagement module OncallSchedules - class UpdateService + class UpdateService < BaseService # @param oncall_schedule [IncidentManagement::OncallSchedule] # @param user [User] # @param params [Hash] @@ -28,29 +28,9 @@ def execute attr_reader :oncall_schedule, :user, :params, :project - def allowed? - user&.can?(:admin_incident_management_oncall_schedule, project) - end - - def available? - ::Gitlab::IncidentManagement.oncall_schedules_available?(project) - end - - def error(message) - ServiceResponse.error(message: message) - end - - def success(oncall_schedule) - ServiceResponse.success(payload: { oncall_schedule: oncall_schedule }) - end - def error_no_permissions error(_('You have insufficient permissions to update an on-call schedule for this project')) end - - def error_no_license - error(_('Your license does not support on-call schedules')) - end end end end