diff options
Diffstat (limited to 'app/services/users')
-rw-r--r-- | app/services/users/migrate_to_ghost_user_service.rb | 21 | ||||
-rw-r--r-- | app/services/users/saved_replies/create_service.rb | 29 | ||||
-rw-r--r-- | app/services/users/saved_replies/update_service.rb | 26 |
3 files changed, 70 insertions, 6 deletions
diff --git a/app/services/users/migrate_to_ghost_user_service.rb b/app/services/users/migrate_to_ghost_user_service.rb index 575614e8743..604b83f621f 100644 --- a/app/services/users/migrate_to_ghost_user_service.rb +++ b/app/services/users/migrate_to_ghost_user_service.rb @@ -66,20 +66,20 @@ module Users # rubocop: disable CodeReuse/ActiveRecord def migrate_issues - user.issues.update_all(author_id: ghost_user.id) - Issue.where(last_edited_by_id: user.id).update_all(last_edited_by_id: ghost_user.id) + batched_migrate(Issue, :author_id) + batched_migrate(Issue, :last_edited_by_id) end # rubocop: enable CodeReuse/ActiveRecord # rubocop: disable CodeReuse/ActiveRecord def migrate_merge_requests - user.merge_requests.update_all(author_id: ghost_user.id) - MergeRequest.where(merge_user_id: user.id).update_all(merge_user_id: ghost_user.id) + batched_migrate(MergeRequest, :author_id) + batched_migrate(MergeRequest, :merge_user_id) end # rubocop: enable CodeReuse/ActiveRecord def migrate_notes - user.notes.update_all(author_id: ghost_user.id) + batched_migrate(Note, :author_id) end def migrate_abuse_reports @@ -96,8 +96,17 @@ module Users end def migrate_reviews - user.reviews.update_all(author_id: ghost_user.id) + batched_migrate(Review, :author_id) end + + # rubocop:disable CodeReuse/ActiveRecord + def batched_migrate(base_scope, column) + loop do + update_count = base_scope.where(column => user.id).limit(100).update_all(column => ghost_user.id) + break if update_count == 0 + end + end + # rubocop:enable CodeReuse/ActiveRecord end end diff --git a/app/services/users/saved_replies/create_service.rb b/app/services/users/saved_replies/create_service.rb new file mode 100644 index 00000000000..21378ec4435 --- /dev/null +++ b/app/services/users/saved_replies/create_service.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +module Users + module SavedReplies + class CreateService + def initialize(current_user:, name:, content:) + @current_user = current_user + @name = name + @content = content + end + + def execute + saved_reply = saved_replies.build(name: name, content: content) + + if saved_reply.save + ServiceResponse.success(payload: { saved_reply: saved_reply }) + else + ServiceResponse.error(message: saved_reply.errors.full_messages) + end + end + + private + + attr_reader :current_user, :name, :content + + delegate :saved_replies, to: :current_user + end + end +end diff --git a/app/services/users/saved_replies/update_service.rb b/app/services/users/saved_replies/update_service.rb new file mode 100644 index 00000000000..ab0a3eaf87d --- /dev/null +++ b/app/services/users/saved_replies/update_service.rb @@ -0,0 +1,26 @@ +# frozen_string_literal: true + +module Users + module SavedReplies + class UpdateService + def initialize(current_user:, saved_reply:, name:, content:) + @current_user = current_user + @saved_reply = saved_reply + @name = name + @content = content + end + + def execute + if saved_reply.update(name: name, content: content) + ServiceResponse.success(payload: { saved_reply: saved_reply.reset }) + else + ServiceResponse.error(message: saved_reply.errors.full_messages) + end + end + + private + + attr_reader :current_user, :saved_reply, :name, :content + end + end +end |