diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2018-04-26 16:10:25 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-04-26 16:10:25 +0900 |
| commit | 5d4b884528e0533e32b9c827ae8ccf64df0085dc (patch) | |
| tree | 1f6a3238dfbf1f77da78d96e993f6d76cad73089 /src/models | |
| parent | Refactor (diff) | |
| parent | wip (diff) | |
| download | misskey-5d4b884528e0533e32b9c827ae8ccf64df0085dc.tar.gz misskey-5d4b884528e0533e32b9c827ae8ccf64df0085dc.tar.bz2 misskey-5d4b884528e0533e32b9c827ae8ccf64df0085dc.zip | |
Merge pull request #1550 from syuilo/user-list
User list
Diffstat (limited to 'src/models')
| -rw-r--r-- | src/models/note-reaction.ts | 2 | ||||
| -rw-r--r-- | src/models/sw-subscription.ts | 1 | ||||
| -rw-r--r-- | src/models/user-list.ts | 67 | ||||
| -rw-r--r-- | src/models/user.ts | 22 |
4 files changed, 87 insertions, 5 deletions
diff --git a/src/models/note-reaction.ts b/src/models/note-reaction.ts index 7891ebdf17..f78b0d9d01 100644 --- a/src/models/note-reaction.ts +++ b/src/models/note-reaction.ts @@ -1,5 +1,5 @@ import * as mongo from 'mongodb'; -import $ from 'cafy'; +import $ from 'cafy'; import ID from '../../../../cafy-id'; import deepcopy = require('deepcopy'); import db from '../db/mongodb'; import Reaction from './note-reaction'; diff --git a/src/models/sw-subscription.ts b/src/models/sw-subscription.ts index 621ac8a9b6..a38edd3a50 100644 --- a/src/models/sw-subscription.ts +++ b/src/models/sw-subscription.ts @@ -38,4 +38,3 @@ export async function deleteSwSubscription(swSubscription: string | mongo.Object _id: s._id }); } - diff --git a/src/models/user-list.ts b/src/models/user-list.ts new file mode 100644 index 0000000000..7100fced7e --- /dev/null +++ b/src/models/user-list.ts @@ -0,0 +1,67 @@ +import * as mongo from 'mongodb'; +import deepcopy = require('deepcopy'); +import db from '../db/mongodb'; + +const UserList = db.get<IUserList>('userList'); +export default UserList; + +export interface IUserList { + _id: mongo.ObjectID; + createdAt: Date; + title: string; + userId: mongo.ObjectID; + userIds: mongo.ObjectID[]; +} + +/** + * UserListを物理削除します + */ +export async function deleteUserList(userList: string | mongo.ObjectID | IUserList) { + let u: IUserList; + + // Populate + if (mongo.ObjectID.prototype.isPrototypeOf(userList)) { + u = await UserList.findOne({ + _id: userList + }); + } else if (typeof userList === 'string') { + u = await UserList.findOne({ + _id: new mongo.ObjectID(userList) + }); + } else { + u = userList as IUserList; + } + + if (u == null) return; + + // このUserListを削除 + await UserList.remove({ + _id: u._id + }); +} + +export const pack = ( + userList: string | mongo.ObjectID | IUserList +) => new Promise<any>(async (resolve, reject) => { + let _userList: any; + + if (mongo.ObjectID.prototype.isPrototypeOf(userList)) { + _userList = await UserList.findOne({ + _id: userList + }); + } else if (typeof userList === 'string') { + _userList = await UserList.findOne({ + _id: new mongo.ObjectID(userList) + }); + } else { + _userList = deepcopy(userList); + } + + if (!_userList) throw `invalid userList arg ${userList}`; + + // Rename _id to id + _userList.id = _userList._id; + delete _userList._id; + + resolve(_userList); +}); diff --git a/src/models/user.ts b/src/models/user.ts index ca1ca28937..0621b6e736 100644 --- a/src/models/user.ts +++ b/src/models/user.ts @@ -1,5 +1,6 @@ import * as mongo from 'mongodb'; import deepcopy = require('deepcopy'); +import sequential = require('promise-sequential'); import rap from '@prezzemolo/rap'; import db from '../db/mongodb'; import Note, { pack as packNote, deleteNote } from './note'; @@ -20,6 +21,7 @@ import FollowingLog, { deleteFollowingLog } from './following-log'; import FollowedLog, { deleteFollowedLog } from './followed-log'; import SwSubscription, { deleteSwSubscription } from './sw-subscription'; import Notification, { deleteNotification } from './notification'; +import UserList, { deleteUserList } from './user-list'; const User = db.get<IUser>('users'); @@ -166,9 +168,9 @@ export async function deleteUser(user: string | mongo.ObjectID | IUser) { ).map(x => deleteAccessToken(x))); // このユーザーのNoteをすべて削除 - await Promise.all(( - await Note.find({ userId: u._id }) - ).map(x => deleteNote(x))); + //await sequential(( + // await Note.find({ userId: u._id }) + //).map(x => () => deleteNote(x))); // このユーザーのNoteReactionをすべて削除 await Promise.all(( @@ -260,6 +262,20 @@ export async function deleteUser(user: string | mongo.ObjectID | IUser) { await Notification.find({ notifierId: u._id }) ).map(x => deleteNotification(x))); + // このユーザーのUserListをすべて削除 + await Promise.all(( + await UserList.find({ userId: u._id }) + ).map(x => deleteUserList(x))); + + // このユーザーが入っているすべてのUserListからこのユーザーを削除 + await Promise.all(( + await UserList.find({ userIds: u._id }) + ).map(x => + UserList.update({ _id: x._id }, { + $pull: { userIds: u._id } + }) + )); + // このユーザーを削除 await User.remove({ _id: u._id |