diff options
| author | syuilo <syuilotan@yahoo.co.jp> | 2018-10-23 05:36:35 +0900 |
|---|---|---|
| committer | syuilo <syuilotan@yahoo.co.jp> | 2018-10-23 05:36:35 +0900 |
| commit | 7c7f32d9a6597fdc7bea02da0cfd4a843fd32d22 (patch) | |
| tree | a67396d881993b4240b49f288594b827ef58531c /src/chart/users.ts | |
| parent | fix(package): update file-type to version 10.1.0 (#2984) (diff) | |
| download | sharkey-7c7f32d9a6597fdc7bea02da0cfd4a843fd32d22.tar.gz sharkey-7c7f32d9a6597fdc7bea02da0cfd4a843fd32d22.tar.bz2 sharkey-7c7f32d9a6597fdc7bea02da0cfd4a843fd32d22.zip | |
Refactoring
Diffstat (limited to 'src/chart/users.ts')
| -rw-r--r-- | src/chart/users.ts | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/src/chart/users.ts b/src/chart/users.ts new file mode 100644 index 0000000000..547e595b01 --- /dev/null +++ b/src/chart/users.ts @@ -0,0 +1,75 @@ +import autobind from 'autobind-decorator'; +import Chart, { Obj } from './'; +import User, { IUser, isLocalUser } from '../models/user'; + +/** + * ユーザーに関するチャート + */ +type UsersLog = { + local: { + /** + * 集計期間時点での、全ユーザー数 + */ + total: number; + + /** + * 増加したユーザー数 + */ + inc: number; + + /** + * 減少したユーザー数 + */ + dec: number; + }; + + remote: UsersLog['local']; +}; + +class UsersChart extends Chart<UsersLog> { + constructor() { + super('users'); + } + + @autobind + protected async getTemplate(init: boolean, latest?: UsersLog): Promise<UsersLog> { + const [localCount, remoteCount] = init ? await Promise.all([ + User.count({ host: null }), + User.count({ host: { $ne: null } }) + ]) : [ + latest ? latest.local.total : 0, + latest ? latest.remote.total : 0 + ]; + + return { + local: { + total: localCount, + inc: 0, + dec: 0 + }, + remote: { + total: remoteCount, + inc: 0, + dec: 0 + } + }; + } + + @autobind + public async update(user: IUser, isAdditional: boolean) { + const update: Obj = {}; + + update.total = isAdditional ? 1 : -1; + if (isAdditional) { + update.inc = 1; + } else { + update.dec = 1; + } + + await this.inc({ + [isLocalUser(user) ? 'local' : 'remote']: update + }); + } +} + +export default new UsersChart(); |