diff options
| author | syuilo <syuilotan@yahoo.co.jp> | 2017-10-30 22:12:10 +0900 |
|---|---|---|
| committer | syuilo <syuilotan@yahoo.co.jp> | 2017-10-30 22:12:10 +0900 |
| commit | caa47cb38cfc3950539c78ca2e70f2c50e815d2c (patch) | |
| tree | fc1a70e1c1b105ecf8d74ff4d952eff86ded83f6 /src/api/common/read-notification.ts | |
| parent | i18n (diff) | |
| download | sharkey-caa47cb38cfc3950539c78ca2e70f2c50e815d2c.tar.gz sharkey-caa47cb38cfc3950539c78ca2e70f2c50e815d2c.tar.bz2 sharkey-caa47cb38cfc3950539c78ca2e70f2c50e815d2c.zip | |
未読の通知がある場合アイコンを表示するように
Diffstat (limited to 'src/api/common/read-notification.ts')
| -rw-r--r-- | src/api/common/read-notification.ts | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/src/api/common/read-notification.ts b/src/api/common/read-notification.ts new file mode 100644 index 0000000000..3009cc5d08 --- /dev/null +++ b/src/api/common/read-notification.ts @@ -0,0 +1,52 @@ +import * as mongo from 'mongodb'; +import { default as Notification, INotification } from '../models/notification'; +import publishUserStream from '../event'; + +/** + * Mark as read notification(s) + */ +export default ( + user: string | mongo.ObjectID, + message: string | string[] | INotification | INotification[] | mongo.ObjectID | mongo.ObjectID[] +) => new Promise<any>(async (resolve, reject) => { + + const userId = mongo.ObjectID.prototype.isPrototypeOf(user) + ? user + : new mongo.ObjectID(user); + + const ids: mongo.ObjectID[] = Array.isArray(message) + ? mongo.ObjectID.prototype.isPrototypeOf(message[0]) + ? (message as mongo.ObjectID[]) + : typeof message[0] === 'string' + ? (message as string[]).map(m => new mongo.ObjectID(m)) + : (message as INotification[]).map(m => m._id) + : mongo.ObjectID.prototype.isPrototypeOf(message) + ? [(message as mongo.ObjectID)] + : typeof message === 'string' + ? [new mongo.ObjectID(message)] + : [(message as INotification)._id]; + + // Update documents + await Notification.update({ + _id: { $in: ids }, + is_read: false + }, { + $set: { + is_read: true + } + }, { + multi: true + }); + + // Calc count of my unread notifications + const count = await Notification + .count({ + notifiee_id: userId, + is_read: false + }); + + if (count == 0) { + // 全ての(いままで未読だった)通知を(これで)読みましたよというイベントを発行 + publishUserStream(userId, 'read_all_notifications'); + } +}); |