diff options
| author | syuilo <syuilotan@yahoo.co.jp> | 2018-10-22 17:36:36 +0900 |
|---|---|---|
| committer | syuilo <syuilotan@yahoo.co.jp> | 2018-10-22 17:36:36 +0900 |
| commit | 3bebf82501695ec4372eaadafaf42b845c387dcf (patch) | |
| tree | 0eb72e3b5180ac0de4d85d0d212add83c0c60d65 /src/services | |
| parent | Refactor (diff) | |
| download | sharkey-3bebf82501695ec4372eaadafaf42b845c387dcf.tar.gz sharkey-3bebf82501695ec4372eaadafaf42b845c387dcf.tar.bz2 sharkey-3bebf82501695ec4372eaadafaf42b845c387dcf.zip | |
Implement #2980
Diffstat (limited to 'src/services')
| -rw-r--r-- | src/services/note/reaction/create.ts | 3 | ||||
| -rw-r--r-- | src/services/stats.ts | 43 |
2 files changed, 46 insertions, 0 deletions
diff --git a/src/services/note/reaction/create.ts b/src/services/note/reaction/create.ts index 8fa0b52e7d..13bb44ff3b 100644 --- a/src/services/note/reaction/create.ts +++ b/src/services/note/reaction/create.ts @@ -8,6 +8,7 @@ import watch from '../watch'; import renderLike from '../../../remote/activitypub/renderer/like'; import { deliver } from '../../../queue'; import pack from '../../../remote/activitypub/renderer'; +import { perUserReactionsStats } from '../../stats'; export default async (user: IUser, note: INote, reaction: string) => new Promise(async (res, rej) => { // Myself @@ -43,6 +44,8 @@ export default async (user: IUser, note: INote, reaction: string) => new Promise $inc: inc }); + perUserReactionsStats.update(user, note); + publishNoteStream(note._id, 'reacted', { reaction: reaction, userId: user._id diff --git a/src/services/stats.ts b/src/services/stats.ts index 086420bb4b..a7b584f4dd 100644 --- a/src/services/stats.ts +++ b/src/services/stats.ts @@ -912,6 +912,49 @@ class PerUserNotesStats extends Stats<PerUserNotesLog> { export const perUserNotesStats = new PerUserNotesStats(); //#endregion +//#region Per user reactions stats +/** + * ユーザーごとのリアクションに関する統計 + */ +type PerUserReactionsLog = { + local: { + /** + * リアクションされた数 + */ + count: number; + }; + + remote: PerUserReactionsLog['local']; +}; + +class PerUserReactionsStats extends Stats<PerUserReactionsLog> { + constructor() { + super('perUserReaction', true); + } + + @autobind + protected async getTemplate(init: boolean, latest?: PerUserReactionsLog, group?: any): Promise<PerUserReactionsLog> { + return { + local: { + count: 0 + }, + remote: { + count: 0 + } + }; + } + + @autobind + public async update(user: IUser, note: INote) { + this.inc({ + [isLocalUser(user) ? 'local' : 'remote']: { count: 1 } + }, note.userId); + } +} + +export const perUserReactionsStats = new PerUserReactionsStats(); +//#endregion + //#region Per user drive stats /** * ユーザーごとのドライブに関する統計 |