diff options
| author | syuilo <syuilotan@yahoo.co.jp> | 2018-04-15 06:34:55 +0900 |
|---|---|---|
| committer | syuilo <syuilotan@yahoo.co.jp> | 2018-04-15 06:34:55 +0900 |
| commit | 0ef280377bbbd357bef688ab5c7fd609fd78af72 (patch) | |
| tree | 7745b237a21de429e828c6f007a59812894fabbf /src/models | |
| parent | i18n (diff) | |
| download | sharkey-0ef280377bbbd357bef688ab5c7fd609fd78af72.tar.gz sharkey-0ef280377bbbd357bef688ab5c7fd609fd78af72.tar.bz2 sharkey-0ef280377bbbd357bef688ab5c7fd609fd78af72.zip | |
wip
Diffstat (limited to 'src/models')
| -rw-r--r-- | src/models/note.ts | 11 | ||||
| -rw-r--r-- | src/models/notification.ts | 27 | ||||
| -rw-r--r-- | src/models/user.ts | 11 |
3 files changed, 46 insertions, 3 deletions
diff --git a/src/models/note.ts b/src/models/note.ts index 6d315db4cf..1dcc70c175 100644 --- a/src/models/note.ts +++ b/src/models/note.ts @@ -5,13 +5,13 @@ import db from '../db/mongodb'; import { IUser, pack as packUser } from './user'; import { pack as packApp } from './app'; import { pack as packChannel } from './channel'; -import Vote, { deletePollVote } from './poll-vote'; +import PollVote, { deletePollVote } from './poll-vote'; import Reaction, { deleteNoteReaction } from './note-reaction'; import { pack as packFile } from './drive-file'; import NoteWatching, { deleteNoteWatching } from './note-watching'; import NoteReaction from './note-reaction'; import Favorite, { deleteFavorite } from './favorite'; -import PollVote from './poll-vote'; +import Notification, { deleteNotification } from './notification'; const Note = db.get<INote>('notes'); @@ -123,6 +123,11 @@ export async function deleteNote(note: string | mongo.ObjectID | INote) { await Favorite.find({ noteId: n._id }) ).map(x => deleteFavorite(x))); + // この投稿に対するNotificationをすべて削除 + await Promise.all(( + await Notification.find({ noteId: n._id }) + ).map(x => deleteNotification(x))); + // このNoteを削除 await Note.remove({ _id: n._id @@ -258,7 +263,7 @@ export const pack = async ( // Poll if (meId && _note.poll) { _note.poll = (async (poll) => { - const vote = await Vote + const vote = await PollVote .findOne({ userId: meId, noteId: id diff --git a/src/models/notification.ts b/src/models/notification.ts index d5ca7135b7..76871166a9 100644 --- a/src/models/notification.ts +++ b/src/models/notification.ts @@ -50,6 +50,33 @@ export interface INotification { } /** + * Notificationを物理削除します + */ +export async function deleteNotification(notification: string | mongo.ObjectID | INotification) { + let n: INotification; + + // Populate + if (mongo.ObjectID.prototype.isPrototypeOf(notification)) { + n = await Notification.findOne({ + _id: notification + }); + } else if (typeof notification === 'string') { + n = await Notification.findOne({ + _id: new mongo.ObjectID(notification) + }); + } else { + n = notification as INotification; + } + + if (n == null) return; + + // このNotificationを削除 + await Notification.remove({ + _id: n._id + }); +} + +/** * Pack a notification for API response */ export const pack = (notification: any) => new Promise<any>(async (resolve, reject) => { diff --git a/src/models/user.ts b/src/models/user.ts index 686bcc5ec5..56ca0c625f 100644 --- a/src/models/user.ts +++ b/src/models/user.ts @@ -19,6 +19,7 @@ import PollVote, { deletePollVote } from './poll-vote'; import FollowingLog, { deleteFollowingLog } from './following-log'; import FollowedLog, { deleteFollowedLog } from './followed-log'; import SwSubscription, { deleteSwSubscription } from './sw-subscription'; +import Notification, { deleteNotification } from './notification'; const User = db.get<IUser>('users'); @@ -246,6 +247,16 @@ export async function deleteUser(user: string | mongo.ObjectID | IUser) { await SwSubscription.find({ userId: u._id }) ).map(x => deleteSwSubscription(x))); + // このユーザーのNotificationをすべて削除 + await Promise.all(( + await Notification.find({ notifieeId: u._id }) + ).map(x => deleteNotification(x))); + + // このユーザーが原因となったNotificationをすべて削除 + await Promise.all(( + await Notification.find({ notifierId: u._id }) + ).map(x => deleteNotification(x))); + // このユーザーを削除 } |