Return both unread and new notification count from the API

Related to #500.
This commit is contained in:
Franz Liedke 2015-09-29 01:26:28 +02:00
parent 56f9016ff7
commit 040ce52724
4 changed files with 38 additions and 11 deletions

View File

@ -70,13 +70,11 @@ export default class NotificationsDropdown extends Dropdown {
}
getUnreadCount() {
return app.cache.notifications ?
app.cache.notifications.filter(notification => !notification.isRead()).length :
0;
return app.session.user.unreadNotificationsCount();
}
getNewCount() {
return app.session.user.unreadNotificationsCount();
return app.session.user.newNotificationsCount();
}
menuClick(e) {

View File

@ -23,6 +23,7 @@ export default class User extends mixin(Model, {
lastSeenTime: Model.attribute('lastSeenTime', Model.transformDate),
readTime: Model.attribute('readTime', Model.transformDate),
unreadNotificationsCount: Model.attribute('unreadNotificationsCount'),
newNotificationsCount: Model.attribute('newNotificationsCount'),
discussionsCount: Model.attribute('discussionsCount'),
commentsCount: Model.attribute('commentsCount'),

View File

@ -23,6 +23,7 @@ class CurrentUserSerializer extends UserSerializer
$attributes += [
'readTime' => $user->read_time ? $user->read_time->toRFC3339String() : null,
'unreadNotificationsCount' => $user->getUnreadNotificationsCount(),
'newNotificationsCount' => $user->getNewNotificationsCount(),
'preferences' => $user->preferences
];
}

View File

@ -432,16 +432,43 @@ class User extends Model
/**
* Get the number of unread notifications for the user.
*
* @return mixed
* @return int
*/
public function getUnreadNotificationsCount()
{
return $this->notifications()
->whereIn('type', $this->getAlertableNotificationTypes())
->where('time', '>', $this->notifications_read_time ?: 0)
->where('is_read', 0)
->where('is_deleted', 0)
->count($this->getConnection()->raw('DISTINCT type, subject_id'));
return $this->getUnreadNotifications()->count();
}
/**
* Get all notifications that have not been read yet
*
* @return \Illuminate\Database\Eloquent\Collection
*/
protected function getUnreadNotifications()
{
static $cached = null;
if (is_null($cached)) {
$cached = $this->notifications()
->whereIn('type', $this->getAlertableNotificationTypes())
->where('is_read', 0)
->where('is_deleted', 0)
->get();
}
return $cached;
}
/**
* Get the number of new, unseen notifications for the user.
*
* @return int
*/
public function getNewNotificationsCount()
{
return $this->getUnreadNotifications()->filter(function($notification) {
return $notification->time > $this->notifications_read_time ?: 0;
})->count();
}
/**