summaryrefslogtreecommitdiff
path: root/src/models
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2018-04-26 16:10:25 +0900
committerGitHub <noreply@github.com>2018-04-26 16:10:25 +0900
commit5d4b884528e0533e32b9c827ae8ccf64df0085dc (patch)
tree1f6a3238dfbf1f77da78d96e993f6d76cad73089 /src/models
parentRefactor (diff)
parentwip (diff)
downloadmisskey-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.ts2
-rw-r--r--src/models/sw-subscription.ts1
-rw-r--r--src/models/user-list.ts67
-rw-r--r--src/models/user.ts22
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