scinote-web/app/controllers/user_notifications_controller.rb

60 lines
1.9 KiB
Ruby
Raw Normal View History

# frozen_string_literal: true
2016-10-03 20:40:15 +08:00
class UserNotificationsController < ApplicationController
2016-10-03 20:40:15 +08:00
def index
page = (params[:page] || 1).to_i
notifications = load_notifications.page(page).per(Constants::INFINITE_SCROLL_LIMIT).without_count
2016-09-29 20:49:58 +08:00
respond_to do |format|
format.json do
render json: {
notifications: notifications,
next_page: notifications.next_page
2016-09-29 20:49:58 +08:00
}
end
end
UserNotification.where(
notification_id: notifications.where.not(type_of: 2).select(:id)
).seen_by_user(current_user)
current_user.user_system_notifications.where(
system_notification_id: notifications.where(type_of: 2).select(:id)
).mark_as_seen
end
def unseen_counter
render json: {
unseen: load_notifications.where(checked: false).size
}
2016-09-29 20:49:58 +08:00
end
private
def load_notifications
user_notifications = current_user.notifications
.select(:id, :type_of, :title, :message, :created_at, 'user_notifications.checked')
system_notifications = current_user.system_notifications
.select(
:id,
'2 AS type_of',
:title,
'description AS message',
:created_at,
'CASE WHEN seen_at IS NULL THEN false ELSE true END AS checked'
)
notifications =
case params[:type]
when 'message'
user_notifications
when 'system'
Notification.from("(#{system_notifications.to_sql}) AS notifications")
else
Notification.from(
"((#{user_notifications.to_sql}) UNION ALL (#{system_notifications.to_sql})) AS notifications"
)
2016-09-29 20:49:58 +08:00
end
notifications.order(created_at: :desc)
2016-09-28 22:03:52 +08:00
end
end