This commit is contained in:
syuilo 2021-07-09 01:07:55 +09:00
parent ae674d2507
commit 2bd3bec2d5
2 changed files with 25 additions and 3 deletions

View File

@ -4,9 +4,6 @@ import { Notification } from '../../../models/entities/notification';
import { Notifications, Users } from '../../../models'; import { Notifications, Users } from '../../../models';
import { In } from 'typeorm'; import { In } from 'typeorm';
/**
* Mark notifications as read
*/
export async function readNotification( export async function readNotification(
userId: User['id'], userId: User['id'],
notificationIds: Notification['id'][] notificationIds: Notification['id'][]
@ -19,6 +16,26 @@ export async function readNotification(
isRead: true isRead: true
}); });
post(userId);
}
export async function readNotificationByQuery(
userId: User['id'],
query: Record<string, any>
) {
// Update documents
await Notifications.update({
...query,
notifieeId: userId,
isRead: false
}, {
isRead: true
});
post(userId);
}
async function post(userId: User['id']) {
if (!await Users.getHasUnreadNotification(userId)) { if (!await Users.getHasUnreadNotification(userId)) {
// 全ての(いままで未読だった)通知を(これで)読みましたよというイベントを発行 // 全ての(いままで未読だった)通知を(これで)読みましたよというイベントを発行
publishMainStream(userId, 'readAllNotifications'); publishMainStream(userId, 'readAllNotifications');

View File

@ -7,6 +7,7 @@ import { Channel } from '../../models/entities/channel';
import { checkHitAntenna } from '@/misc/check-hit-antenna'; import { checkHitAntenna } from '@/misc/check-hit-antenna';
import { getAntennas } from '@/misc/antenna-cache'; import { getAntennas } from '@/misc/antenna-cache';
import { PackedNote } from '../../models/repositories/note'; import { PackedNote } from '../../models/repositories/note';
import { readNotificationByQuery } from '@/server/api/common/read-notification';
/** /**
* Mark notes as read * Mark notes as read
@ -96,6 +97,10 @@ export default async function(
publishMainStream(userId, 'readAllChannels'); publishMainStream(userId, 'readAllChannels');
} }
}); });
readNotificationByQuery(userId, {
noteId: In([...readMentions.map(n => n.id), ...readSpecifiedNotes.map(n => n.id)]),
});
} }
if (readAntennaNotes.length > 0) { if (readAntennaNotes.length > 0) {