b0bbd757b5
Co-authored-by: Pranav Raj Sreepuram <pranavrajs@gmail.com>
40 lines
1.3 KiB
Ruby
40 lines
1.3 KiB
Ruby
class Api::V1::Accounts::NotificationsController < Api::V1::Accounts::BaseController
|
|
protect_from_forgery with: :null_session
|
|
|
|
before_action :fetch_notification, only: [:update]
|
|
before_action :set_primary_actor, only: [:read_all]
|
|
|
|
def index
|
|
@unread_count = current_user.notifications.where(account_id: current_account.id, read_at: nil).count
|
|
@notifications = current_user.notifications.where(account_id: current_account.id).page params[:page]
|
|
end
|
|
|
|
def read_all
|
|
if @primary_actor
|
|
current_user.notifications.where(account_id: current_account.id, primary_actor: @primary_actor, read_at: nil)
|
|
.update(read_at: DateTime.now.utc)
|
|
else
|
|
current_user.notifications.where(account_id: current_account.id, read_at: nil).update(read_at: DateTime.now.utc)
|
|
end
|
|
|
|
head :ok
|
|
end
|
|
|
|
def update
|
|
@notification.update(read_at: DateTime.now.utc)
|
|
render json: @notification
|
|
end
|
|
|
|
private
|
|
|
|
def set_primary_actor
|
|
return unless params[:primary_actor_type]
|
|
return unless Notification::PRIMARY_ACTORS.include?(params[:primary_actor_type])
|
|
|
|
@primary_actor = params[:primary_actor_type].safe_constantize.find_by(id: params[:primary_actor_id])
|
|
end
|
|
|
|
def fetch_notification
|
|
@notification = current_user.notifications.find(params[:id])
|
|
end
|
|
end
|