diff options
Diffstat (limited to 'src/services/note/read.ts')
| -rw-r--r-- | src/services/note/read.ts | 53 |
1 files changed, 40 insertions, 13 deletions
diff --git a/src/services/note/read.ts b/src/services/note/read.ts index c05a58534a..1cbe0e311b 100644 --- a/src/services/note/read.ts +++ b/src/services/note/read.ts @@ -1,7 +1,7 @@ import { publishMainStream } from '../stream'; import { Note } from '../../models/entities/note'; import { User } from '../../models/entities/user'; -import { NoteUnreads } from '../../models'; +import { NoteUnreads, Antennas, AntennaNotes, Users } from '../../models'; /** * Mark a note as read @@ -17,27 +17,54 @@ export default ( }); // v11 TODO: https://github.com/typeorm/typeorm/issues/2415 - //if (res.affected == 0) { + //if (res.affected === 0) { // return; //} - const count1 = await NoteUnreads.count({ - userId: userId, - isSpecified: false - }); - - const count2 = await NoteUnreads.count({ - userId: userId, - isSpecified: true - }); + const [count1, count2] = await Promise.all([ + NoteUnreads.count({ + userId: userId, + isSpecified: false + }), + NoteUnreads.count({ + userId: userId, + isSpecified: true + }) + ]); - if (count1 == 0) { + if (count1 === 0) { // 全て既読になったイベントを発行 publishMainStream(userId, 'readAllUnreadMentions'); } - if (count2 == 0) { + if (count2 === 0) { // 全て既読になったイベントを発行 publishMainStream(userId, 'readAllUnreadSpecifiedNotes'); } + + const antennas = await Antennas.find({ userId }); + + await Promise.all(antennas.map(async antenna => { + await AntennaNotes.update({ + antennaId: antenna.id, + noteId: noteId + }, { + read: true + }); + + const count = await AntennaNotes.count({ + antennaId: antenna.id, + read: false + }); + + if (count === 0) { + publishMainStream(userId, 'readAntenna', antenna); + } + })); + + Users.getHasUnreadAntenna(userId).then(unread => { + if (!unread) { + publishMainStream(userId, 'readAllAntennas'); + } + }) }); |