This commit is contained in:
syuilo 2018-04-15 06:34:55 +09:00
parent 9c2f340c1e
commit 0ef280377b
3 changed files with 46 additions and 3 deletions

View File

@ -5,13 +5,13 @@ import db from '../db/mongodb';
import { IUser, pack as packUser } from './user'; import { IUser, pack as packUser } from './user';
import { pack as packApp } from './app'; import { pack as packApp } from './app';
import { pack as packChannel } from './channel'; 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 Reaction, { deleteNoteReaction } from './note-reaction';
import { pack as packFile } from './drive-file'; import { pack as packFile } from './drive-file';
import NoteWatching, { deleteNoteWatching } from './note-watching'; import NoteWatching, { deleteNoteWatching } from './note-watching';
import NoteReaction from './note-reaction'; import NoteReaction from './note-reaction';
import Favorite, { deleteFavorite } from './favorite'; import Favorite, { deleteFavorite } from './favorite';
import PollVote from './poll-vote'; import Notification, { deleteNotification } from './notification';
const Note = db.get<INote>('notes'); 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 }) await Favorite.find({ noteId: n._id })
).map(x => deleteFavorite(x))); ).map(x => deleteFavorite(x)));
// この投稿に対するNotificationをすべて削除
await Promise.all((
await Notification.find({ noteId: n._id })
).map(x => deleteNotification(x)));
// このNoteを削除 // このNoteを削除
await Note.remove({ await Note.remove({
_id: n._id _id: n._id
@ -258,7 +263,7 @@ export const pack = async (
// Poll // Poll
if (meId && _note.poll) { if (meId && _note.poll) {
_note.poll = (async (poll) => { _note.poll = (async (poll) => {
const vote = await Vote const vote = await PollVote
.findOne({ .findOne({
userId: meId, userId: meId,
noteId: id noteId: id

View File

@ -49,6 +49,33 @@ export interface INotification {
isRead: Boolean; isRead: Boolean;
} }
/**
* 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 * Pack a notification for API response
*/ */

View File

@ -19,6 +19,7 @@ import PollVote, { deletePollVote } from './poll-vote';
import FollowingLog, { deleteFollowingLog } from './following-log'; import FollowingLog, { deleteFollowingLog } from './following-log';
import FollowedLog, { deleteFollowedLog } from './followed-log'; import FollowedLog, { deleteFollowedLog } from './followed-log';
import SwSubscription, { deleteSwSubscription } from './sw-subscription'; import SwSubscription, { deleteSwSubscription } from './sw-subscription';
import Notification, { deleteNotification } from './notification';
const User = db.get<IUser>('users'); 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 }) await SwSubscription.find({ userId: u._id })
).map(x => deleteSwSubscription(x))); ).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)));
// このユーザーを削除 // このユーザーを削除
} }