summaryrefslogtreecommitdiff
path: root/src/server/api/endpoints/admin/show-users.ts
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2019-04-14 20:38:55 +0900
committersyuilo <syuilotan@yahoo.co.jp>2019-04-14 20:38:55 +0900
commitd66e4b7ff97d512e2a2523815e2eef170456b37f (patch)
tree59ae1a102d88b5c2c2236b734ea4a584b4f9ba46 /src/server/api/endpoints/admin/show-users.ts
parent10.100.0 (diff)
parent11.0.0 (diff)
downloadmisskey-d66e4b7ff97d512e2a2523815e2eef170456b37f.tar.gz
misskey-d66e4b7ff97d512e2a2523815e2eef170456b37f.tar.bz2
misskey-d66e4b7ff97d512e2a2523815e2eef170456b37f.zip
Merge branch 'develop'
Diffstat (limited to 'src/server/api/endpoints/admin/show-users.ts')
-rw-r--r--src/server/api/endpoints/admin/show-users.ts74
1 files changed, 30 insertions, 44 deletions
diff --git a/src/server/api/endpoints/admin/show-users.ts b/src/server/api/endpoints/admin/show-users.ts
index 5feb1b4fd8..97760ae797 100644
--- a/src/server/api/endpoints/admin/show-users.ts
+++ b/src/server/api/endpoints/admin/show-users.ts
@@ -1,7 +1,6 @@
import $ from 'cafy';
-import User, { pack } from '../../../../models/user';
import define from '../../define';
-import { fallback } from '../../../../prelude/symbol';
+import { Users } from '../../../../models';
export const meta = {
tags: ['admin'],
@@ -55,51 +54,38 @@ export const meta = {
}
};
-const sort: any = { // < https://github.com/Microsoft/TypeScript/issues/1863
- '+follower': { followersCount: -1 },
- '-follower': { followersCount: 1 },
- '+createdAt': { createdAt: -1 },
- '-createdAt': { createdAt: 1 },
- '+updatedAt': { updatedAt: -1 },
- '-updatedAt': { updatedAt: 1 },
- [fallback]: { _id: -1 }
-};
-
export default define(meta, async (ps, me) => {
- const q = {
- $and: []
- } as any;
+ const query = Users.createQueryBuilder('user');
+
+ switch (ps.state) {
+ case 'admin': query.where('user.isAdmin = TRUE'); break;
+ case 'moderator': query.where('user.isModerator = TRUE'); break;
+ case 'adminOrModerator': query.where('user.isAdmin = TRUE OR isModerator = TRUE'); break;
+ case 'verified': query.where('user.isVerified = TRUE'); break;
+ case 'alive': query.where('user.updatedAt > :date', { date: new Date(Date.now() - 1000 * 60 * 60 * 24 * 5) }); break;
+ case 'silenced': query.where('user.isSilenced = TRUE'); break;
+ case 'suspended': query.where('user.isSuspended = TRUE'); break;
+ }
- // state
- q.$and.push(
- ps.state == 'admin' ? { isAdmin: true } :
- ps.state == 'moderator' ? { isModerator: true } :
- ps.state == 'adminOrModerator' ? {
- $or: [{
- isAdmin: true
- }, {
- isModerator: true
- }]
- } :
- ps.state == 'verified' ? { isVerified: true } :
- ps.state == 'silenced' ? { isSilenced: true } :
- ps.state == 'suspended' ? { isSuspended: true } :
- {}
- );
+ switch (ps.origin) {
+ case 'local': query.andWhere('user.host IS NULL'); break;
+ case 'remote': query.andWhere('user.host IS NOT NULL'); break;
+ }
+
+ switch (ps.sort) {
+ case '+follower': query.orderBy('user.followersCount', 'DESC'); break;
+ case '-follower': query.orderBy('user.followersCount', 'ASC'); break;
+ case '+createdAt': query.orderBy('user.createdAt', 'DESC'); break;
+ case '-createdAt': query.orderBy('user.createdAt', 'ASC'); break;
+ case '+updatedAt': query.orderBy('user.updatedAt', 'DESC'); break;
+ case '-updatedAt': query.orderBy('user.updatedAt', 'ASC'); break;
+ default: query.orderBy('user.id', 'ASC'); break;
+ }
- // origin
- q.$and.push(
- ps.origin == 'local' ? { host: null } :
- ps.origin == 'remote' ? { host: { $ne: null } } :
- {}
- );
+ query.take(ps.limit!);
+ query.skip(ps.offset);
- const users = await User
- .find(q, {
- limit: ps.limit,
- sort: sort[ps.sort] || sort[fallback],
- skip: ps.offset
- });
+ const users = await query.getMany();
- return await Promise.all(users.map(user => pack(user, me, { detail: true })));
+ return await Users.packMany(users, me, { detail: true });
});