2021-03-21 15:35:02 +09:00
|
|
|
import { publishMainStream } from '../stream';
|
|
|
|
import { Note } from '../../models/entities/note';
|
|
|
|
import { User } from '../../models/entities/user';
|
|
|
|
import { NoteUnreads, Antennas, AntennaNotes, Users } from '../../models';
|
2021-03-21 17:38:09 +09:00
|
|
|
import { Not, IsNull, In } from 'typeorm';
|
2021-03-21 15:35:02 +09:00
|
|
|
|
|
|
|
/**
|
2021-03-21 17:38:09 +09:00
|
|
|
* Mark notes as read
|
2021-03-21 15:35:02 +09:00
|
|
|
*/
|
|
|
|
export default async function(
|
|
|
|
userId: User['id'],
|
2021-03-21 17:38:09 +09:00
|
|
|
noteIds: Note['id'][]
|
2021-03-21 15:35:02 +09:00
|
|
|
) {
|
|
|
|
async function careNoteUnreads() {
|
|
|
|
// Remove the record
|
|
|
|
await NoteUnreads.delete({
|
|
|
|
userId: userId,
|
2021-03-21 17:38:09 +09:00
|
|
|
noteId: In(noteIds),
|
2021-03-21 15:35:02 +09:00
|
|
|
});
|
|
|
|
|
2021-03-21 17:38:09 +09:00
|
|
|
NoteUnreads.count({
|
|
|
|
userId: userId,
|
|
|
|
isMentioned: true
|
|
|
|
}).then(mentionsCount => {
|
|
|
|
if (mentionsCount === 0) {
|
|
|
|
// 全て既読になったイベントを発行
|
|
|
|
publishMainStream(userId, 'readAllUnreadMentions');
|
|
|
|
}
|
|
|
|
});
|
2021-03-21 15:35:02 +09:00
|
|
|
|
2021-03-21 17:38:09 +09:00
|
|
|
NoteUnreads.count({
|
|
|
|
userId: userId,
|
|
|
|
isSpecified: true
|
|
|
|
}).then(specifiedCount => {
|
|
|
|
if (specifiedCount === 0) {
|
|
|
|
// 全て既読になったイベントを発行
|
|
|
|
publishMainStream(userId, 'readAllUnreadSpecifiedNotes');
|
|
|
|
}
|
|
|
|
});
|
2021-03-21 15:35:02 +09:00
|
|
|
|
2021-03-21 17:38:09 +09:00
|
|
|
NoteUnreads.count({
|
|
|
|
userId: userId,
|
|
|
|
noteChannelId: Not(IsNull())
|
|
|
|
}).then(channelNoteCount => {
|
|
|
|
if (channelNoteCount === 0) {
|
|
|
|
// 全て既読になったイベントを発行
|
|
|
|
publishMainStream(userId, 'readAllChannels');
|
|
|
|
}
|
|
|
|
});
|
2021-03-21 15:35:02 +09:00
|
|
|
}
|
|
|
|
|
|
|
|
async function careAntenna() {
|
|
|
|
const antennas = await Antennas.find({ userId });
|
|
|
|
|
|
|
|
await Promise.all(antennas.map(async antenna => {
|
|
|
|
const countBefore = await AntennaNotes.count({
|
|
|
|
antennaId: antenna.id,
|
|
|
|
read: false
|
|
|
|
});
|
|
|
|
|
|
|
|
if (countBefore === 0) return;
|
|
|
|
|
|
|
|
await AntennaNotes.update({
|
|
|
|
antennaId: antenna.id,
|
2021-03-21 17:38:09 +09:00
|
|
|
noteId: In(noteIds)
|
2021-03-21 15:35:02 +09:00
|
|
|
}, {
|
|
|
|
read: true
|
|
|
|
});
|
|
|
|
|
|
|
|
const countAfter = await AntennaNotes.count({
|
|
|
|
antennaId: antenna.id,
|
|
|
|
read: false
|
|
|
|
});
|
|
|
|
|
|
|
|
if (countAfter === 0) {
|
|
|
|
publishMainStream(userId, 'readAntenna', antenna);
|
|
|
|
}
|
|
|
|
}));
|
|
|
|
|
|
|
|
Users.getHasUnreadAntenna(userId).then(unread => {
|
|
|
|
if (!unread) {
|
|
|
|
publishMainStream(userId, 'readAllAntennas');
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
careNoteUnreads();
|
|
|
|
careAntenna();
|
|
|
|
}
|