docbrown/app/controllers/notification_subscriptions_controller.rb
Andy Zhao b953f17d0c New Feature: Subscribe to posts! (#3149)
* 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
2019-06-14 12:03:43 -04:00

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