From dc89ad57821845e54cc31bcd2aec7d463af8fbca Mon Sep 17 00:00:00 2001 From: syuilo Date: Mon, 22 Oct 2018 17:37:55 +0900 Subject: [PATCH] Implement some chart APIs --- src/server/api/endpoints/charts/user/drive.ts | 41 +++++++++++++++++++ .../api/endpoints/charts/user/following.ts | 41 +++++++++++++++++++ src/server/api/endpoints/charts/user/notes.ts | 41 +++++++++++++++++++ 3 files changed, 123 insertions(+) create mode 100644 src/server/api/endpoints/charts/user/drive.ts create mode 100644 src/server/api/endpoints/charts/user/following.ts create mode 100644 src/server/api/endpoints/charts/user/notes.ts diff --git a/src/server/api/endpoints/charts/user/drive.ts b/src/server/api/endpoints/charts/user/drive.ts new file mode 100644 index 000000000..d32088795 --- /dev/null +++ b/src/server/api/endpoints/charts/user/drive.ts @@ -0,0 +1,41 @@ +import $ from 'cafy'; +import getParams from '../../../get-params'; +import { perUserDriveStats } from '../../../../../services/stats'; +import ID from '../../../../../misc/cafy-id'; + +export const meta = { + desc: { + 'ja-JP': 'ユーザーごとのドライブの統計を取得します。' + }, + + params: { + span: $.str.or(['day', 'hour']).note({ + desc: { + 'ja-JP': '集計のスパン (day または hour)' + } + }), + + limit: $.num.optional.range(1, 100).note({ + default: 30, + desc: { + 'ja-JP': '最大数。例えば 30 を指定したとすると、スパンが"day"の場合は30日分のデータが、スパンが"hour"の場合は30時間分のデータが返ります。' + } + }), + + userId: $.type(ID).note({ + desc: { + 'ja-JP': '対象のユーザーのID', + 'en-US': 'Target user ID' + } + }) + } +}; + +export default (params: any) => new Promise(async (res, rej) => { + const [ps, psErr] = getParams(meta, params); + if (psErr) throw psErr; + + const stats = await perUserDriveStats.getChart(ps.span as any, ps.limit, ps.userId); + + res(stats); +}); diff --git a/src/server/api/endpoints/charts/user/following.ts b/src/server/api/endpoints/charts/user/following.ts new file mode 100644 index 000000000..dbb2b46df --- /dev/null +++ b/src/server/api/endpoints/charts/user/following.ts @@ -0,0 +1,41 @@ +import $ from 'cafy'; +import getParams from '../../../get-params'; +import { perUserFollowingStats } from '../../../../../services/stats'; +import ID from '../../../../../misc/cafy-id'; + +export const meta = { + desc: { + 'ja-JP': 'ユーザーごとのフォロー/フォロワーの統計を取得します。' + }, + + params: { + span: $.str.or(['day', 'hour']).note({ + desc: { + 'ja-JP': '集計のスパン (day または hour)' + } + }), + + limit: $.num.optional.range(1, 100).note({ + default: 30, + desc: { + 'ja-JP': '最大数。例えば 30 を指定したとすると、スパンが"day"の場合は30日分のデータが、スパンが"hour"の場合は30時間分のデータが返ります。' + } + }), + + userId: $.type(ID).note({ + desc: { + 'ja-JP': '対象のユーザーのID', + 'en-US': 'Target user ID' + } + }) + } +}; + +export default (params: any) => new Promise(async (res, rej) => { + const [ps, psErr] = getParams(meta, params); + if (psErr) throw psErr; + + const stats = await perUserFollowingStats.getChart(ps.span as any, ps.limit, ps.userId); + + res(stats); +}); diff --git a/src/server/api/endpoints/charts/user/notes.ts b/src/server/api/endpoints/charts/user/notes.ts new file mode 100644 index 000000000..a256ed96f --- /dev/null +++ b/src/server/api/endpoints/charts/user/notes.ts @@ -0,0 +1,41 @@ +import $ from 'cafy'; +import getParams from '../../../get-params'; +import { perUserNotesStats } from '../../../../../services/stats'; +import ID from '../../../../../misc/cafy-id'; + +export const meta = { + desc: { + 'ja-JP': 'ユーザーごとの投稿の統計を取得します。' + }, + + params: { + span: $.str.or(['day', 'hour']).note({ + desc: { + 'ja-JP': '集計のスパン (day または hour)' + } + }), + + limit: $.num.optional.range(1, 100).note({ + default: 30, + desc: { + 'ja-JP': '最大数。例えば 30 を指定したとすると、スパンが"day"の場合は30日分のデータが、スパンが"hour"の場合は30時間分のデータが返ります。' + } + }), + + userId: $.type(ID).note({ + desc: { + 'ja-JP': '対象のユーザーのID', + 'en-US': 'Target user ID' + } + }) + } +}; + +export default (params: any) => new Promise(async (res, rej) => { + const [ps, psErr] = getParams(meta, params); + if (psErr) throw psErr; + + const stats = await perUserNotesStats.getChart(ps.span as any, ps.limit, ps.userId); + + res(stats); +});