docbrown/app/services/notification_subscriptions/subscribe.rb
Joshua Wehner 20c282df80
Still trying to fix notification caching when un/subscribing (#19754)
* Revert "Uncache subscribe to comments (#19739)"

This reverts commit 30500805ae.

* Tweak cache key for faster cache change on un/subscribe
2023-07-17 11:23:55 +02:00

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