* Revert "Uncache subscribe to comments (#19739)"
This reverts commit 30500805ae.
* Tweak cache key for faster cache change on un/subscribe
54 lines
1.4 KiB
Ruby
54 lines
1.4 KiB
Ruby
module NotificationSubscriptions
|
|
class Subscribe
|
|
attr_reader :current_user, :comment_id, :article_id, :config
|
|
|
|
# Client-side needs this to be idempotent-ish, return existing subscription instead
|
|
# of raising uniqueness exception
|
|
def self.call(...)
|
|
new(...).call
|
|
end
|
|
|
|
def initialize(current_user, comment_id: nil, article_id: nil, config: nil)
|
|
@current_user = current_user
|
|
@article_id = article_id
|
|
@comment_id = comment_id
|
|
@config = config || "all_comments"
|
|
end
|
|
|
|
# Client-side needs this to be idempotent-ish, return existing subscription instead
|
|
# of raising uniqueness exception
|
|
def call
|
|
raise ArgumentError, "missing notifiable" if notifiable.blank?
|
|
|
|
subscription = NotificationSubscription.find_or_initialize_by(
|
|
user: current_user,
|
|
config: config,
|
|
notifiable: notifiable,
|
|
)
|
|
|
|
if subscription.save
|
|
{ updated: true, subscription: subscription }
|
|
else
|
|
{ errors: subscription.errors_as_sentence }
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def comment
|
|
@comment ||= Comment.find(comment_id) if comment_id.present?
|
|
end
|
|
|
|
def article
|
|
@article ||= Article.find(article_id) if article_id.present?
|
|
end
|
|
|
|
def notifiable
|
|
@notifiable ||= determine_notifiable
|
|
end
|
|
|
|
def determine_notifiable
|
|
comment || article
|
|
end
|
|
end
|
|
end
|