debian-mirror-gitlab/lib/api/notification_settings.rb

101 lines
3.7 KiB
Ruby
Raw Normal View History

2018-12-05 23:21:45 +05:30
# frozen_string_literal: true
2016-09-29 09:46:39 +05:30
module API
# notification_settings API
class NotificationSettings < Grape::API
before { authenticate! }
helpers ::API::Helpers::MembersHelpers
resource :notification_settings do
desc 'Get global notification level settings and email, defaults to Participate' do
detail 'This feature was introduced in GitLab 8.12'
success Entities::GlobalNotificationSetting
end
get do
notification_setting = current_user.global_notification_setting
present notification_setting, with: Entities::GlobalNotificationSetting
end
desc 'Update global notification level settings and email, defaults to Participate' do
detail 'This feature was introduced in GitLab 8.12'
success Entities::GlobalNotificationSetting
end
params do
optional :level, type: String, desc: 'The global notification level'
optional :notification_email, type: String, desc: 'The email address to send notifications'
2018-11-20 20:47:30 +05:30
NotificationSetting.email_events.each do |event|
2016-09-29 09:46:39 +05:30
optional event, type: Boolean, desc: 'Enable/disable this notification'
end
end
put do
notification_setting = current_user.global_notification_setting
begin
notification_setting.transaction do
new_notification_email = params.delete(:notification_email)
2017-09-10 17:25:29 +05:30
if new_notification_email
2018-03-17 18:26:18 +05:30
::Users::UpdateService.new(current_user, user: current_user, notification_email: new_notification_email).execute
2017-09-10 17:25:29 +05:30
end
2017-08-17 22:00:37 +05:30
notification_setting.update(declared_params(include_missing: false))
2016-09-29 09:46:39 +05:30
end
rescue ArgumentError => e # catch level enum error
render_api_error! e.to_s, 400
end
render_validation_error! current_user
render_validation_error! notification_setting
present notification_setting, with: Entities::GlobalNotificationSetting
end
end
2018-11-20 20:47:30 +05:30
[Group, Project].each do |source_class|
source_type = source_class.name.underscore
2017-08-17 22:00:37 +05:30
params do
requires :id, type: String, desc: "The #{source_type} ID"
end
2018-12-23 12:14:25 +05:30
resource source_type.pluralize, requirements: API::NAMESPACE_OR_PROJECT_REQUIREMENTS do
2016-09-29 09:46:39 +05:30
desc "Get #{source_type} level notification level settings, defaults to Global" do
detail 'This feature was introduced in GitLab 8.12'
success Entities::NotificationSetting
end
get ":id/notification_settings" do
source = find_source(source_type, params[:id])
notification_setting = current_user.notification_settings_for(source)
present notification_setting, with: Entities::NotificationSetting
end
desc "Update #{source_type} level notification level settings, defaults to Global" do
detail 'This feature was introduced in GitLab 8.12'
success Entities::NotificationSetting
end
params do
optional :level, type: String, desc: "The #{source_type} notification level"
2018-11-20 20:47:30 +05:30
NotificationSetting.email_events(source_class).each do |event|
2016-09-29 09:46:39 +05:30
optional event, type: Boolean, desc: 'Enable/disable this notification'
end
end
put ":id/notification_settings" do
source = find_source(source_type, params.delete(:id))
notification_setting = current_user.notification_settings_for(source)
begin
2017-08-17 22:00:37 +05:30
notification_setting.update(declared_params(include_missing: false))
2016-09-29 09:46:39 +05:30
rescue ArgumentError => e # catch level enum error
render_api_error! e.to_s, 400
end
render_validation_error! notification_setting
present notification_setting, with: Entities::NotificationSetting
end
end
end
end
end