added 260907 version of worker toolkit
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
class DiscussionMention
|
||||
include Sidekiq::Worker
|
||||
|
||||
NAME_REGEXP = /@\w+/
|
||||
|
||||
def perform(encrypted_user_id, comment_id)
|
||||
comment = Comment.find(comment_id)
|
||||
profiles = found_profiles(comment.body)
|
||||
return if profiles.empty?
|
||||
|
||||
create_notifications(encrypted_user_id, profiles.map(&:user_id), comment)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def found_profiles(mentioned_string)
|
||||
selected_names = mentioned_string.scan(NAME_REGEXP).uniq
|
||||
|
||||
selected_names.each_with_object([]) do |matched_string, result_array|
|
||||
matched_string.slice!(0) # remove '@ tag'
|
||||
|
||||
profile = Profile.find_by(slug_name: matched_string)
|
||||
result_array << profile if profile
|
||||
end
|
||||
end
|
||||
|
||||
def create_notifications(encrypted_user_id, user_ids, comment_id)
|
||||
encrypted_notify_user_ids = user_ids.map { |user_id| SymmetricEncryption.encrypt(user_id) }
|
||||
comment = Comment.find(comment_id)
|
||||
|
||||
encrypted_notify_user_ids.map do |encrypted_notify_user_id|
|
||||
Notification.create(
|
||||
kind: :mention,
|
||||
notificateable: comment,
|
||||
encrypted_user_id: encrypted_user_id,
|
||||
encrypted_notify_user_id: encrypted_notify_user_id
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user