Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app/graphql/mutations/achievements/update_user_achievement_priorities.rb')
-rw-r--r--app/graphql/mutations/achievements/update_user_achievement_priorities.rb37
1 files changed, 37 insertions, 0 deletions
diff --git a/app/graphql/mutations/achievements/update_user_achievement_priorities.rb b/app/graphql/mutations/achievements/update_user_achievement_priorities.rb
new file mode 100644
index 00000000000..077b4810fdc
--- /dev/null
+++ b/app/graphql/mutations/achievements/update_user_achievement_priorities.rb
@@ -0,0 +1,37 @@
+# frozen_string_literal: true
+
+module Mutations
+ module Achievements
+ class UpdateUserAchievementPriorities < BaseMutation
+ graphql_name 'UserAchievementPrioritiesUpdate'
+
+ field :user_achievements,
+ [::Types::Achievements::UserAchievementType],
+ null: false,
+ description: 'Updated user achievements.'
+
+ argument :user_achievement_ids,
+ [::Types::GlobalIDType[::Achievements::UserAchievement]],
+ required: true,
+ description: 'Global IDs of the user achievements being prioritized, ' \
+ 'ordered from highest to lowest priority.'
+
+ def resolve(args)
+ user_achievements = args.delete(:user_achievement_ids).map { |id| find_object(id) }
+
+ user_achievements.each do |user_achievement|
+ unless Ability.allowed?(current_user, :update_owned_user_achievement, user_achievement)
+ raise_resource_not_available_error!
+ end
+ end
+
+ result = ::Achievements::UpdateUserAchievementPrioritiesService.new(current_user, user_achievements).execute
+ { user_achievements: result.payload, errors: result.errors }
+ end
+
+ def find_object(id)
+ ::Gitlab::Graphql::Lazy.force(GitlabSchema.object_from_id(id, expected_type: ::Achievements::UserAchievement))
+ end
+ end
+ end
+end