* Add MVP of notification subscriptions * Add rate limiting for notification subscriptions * Show modal for logged out users on subscribe click * Add enter key functionality for checkbox * Add relationships for notification subscriptions * Add model test for notification subscription * Deprecated article mutes in favor of notification subscriptions * Deprecated comment mutes in favor of notification subscriptions * Move comment muting tests and logic over * Merge comment and article muting into subscriptions * Remove redundant check * Use database to check for rate limit instead of cache * Test for subscriptions handling notifications properly * Fix notification model spec for subscriptions * Fix tests for subscriptions * Remove rate limiting * Properly handle logged out users getting subscription status * Fix test for new pattern * Update reserved words * Add config column to notification subscriptions * Add logic for top level config and move tests * Test for top level subscribers getting notified * Fix logic mistake oops * Add index and refactor comment_user_ids
38 lines
1.4 KiB
Ruby
38 lines
1.4 KiB
Ruby
class NotificationSubscriptionsController < ApplicationController
|
|
def show
|
|
result = if current_user
|
|
NotificationSubscription.exists?(user_id: current_user.id, notifiable_id: params[:notifiable_id], notifiable_type: params[:notifiable_type])
|
|
else
|
|
false
|
|
end
|
|
respond_to do |format|
|
|
format.json { render json: result }
|
|
end
|
|
end
|
|
|
|
def upsert
|
|
not_found unless current_user
|
|
|
|
@notification_subscription = NotificationSubscription.find_or_initialize_by(user_id: current_user.id, notifiable_id: params[:notifiable_id], notifiable_type: params[:notifiable_type].capitalize, config: "all_comments")
|
|
if params[:currently_subscribed] == "true"
|
|
@notification_subscription.notifiable.update(receive_notifications: false) if current_user_is_author?
|
|
@notification_subscription.delete
|
|
elsif params[:currently_subscribed] == "false"
|
|
@notification_subscription.notifiable.update(receive_notifications: true) if current_user_is_author?
|
|
@notification_subscription.save!
|
|
end
|
|
|
|
result = @notification_subscription.persisted?
|
|
respond_to do |format|
|
|
format.json { render json: result }
|
|
format.html { redirect_to request.referer }
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def current_user_is_author?
|
|
# TODO: think of a better solution for handling mute notifications in dashboard / manage
|
|
current_user.id == @notification_subscription.notifiable.user_id
|
|
end
|
|
end
|