52 lines
1.7 KiB
Ruby
52 lines
1.7 KiB
Ruby
require_dependency 'notification_serializer'
|
|
|
|
class NotificationsController < ApplicationController
|
|
|
|
before_filter :ensure_logged_in
|
|
|
|
def index
|
|
user = current_user
|
|
if params[:recent].present?
|
|
notifications = Notification.recent_report(current_user, 10)
|
|
|
|
if notifications.present?
|
|
# ordering can be off due to PMs
|
|
max_id = notifications.map(&:id).max
|
|
current_user.saw_notification_id(max_id) unless params.has_key?(:silent)
|
|
end
|
|
current_user.reload
|
|
current_user.publish_notifications_state
|
|
|
|
render_serialized(notifications, NotificationSerializer, root: :notifications)
|
|
else
|
|
offset = params[:offset].to_i
|
|
user = User.find_by_username(params[:username].to_s) if params[:username]
|
|
|
|
guardian.ensure_can_see_notifications!(user)
|
|
|
|
notifications = Notification.where(user_id: user.id)
|
|
.visible
|
|
.includes(:topic)
|
|
.order(created_at: :desc)
|
|
|
|
total_rows = notifications.dup.count
|
|
notifications = notifications.offset(offset).limit(60)
|
|
render_json_dump(notifications: serialize_data(notifications, NotificationSerializer),
|
|
total_rows_notifications: total_rows,
|
|
load_more_notifications: notifications_path(username: user.username, offset: offset + 60))
|
|
end
|
|
|
|
end
|
|
|
|
def mark_read
|
|
Notification.where(user_id: current_user.id).includes(:topic).where(read: false).update_all(read: true)
|
|
|
|
current_user.saw_notification_id(Notification.recent_report(current_user, 1).max)
|
|
current_user.reload
|
|
current_user.publish_notifications_state
|
|
|
|
render json: success_json
|
|
end
|
|
|
|
end
|