diff --git a/src/server/api/endpoints/charts/user/following.ts b/src/server/api/endpoints/charts/user/following.ts index 73f0c1e4f0..f5b1355038 100644 --- a/src/server/api/endpoints/charts/user/following.ts +++ b/src/server/api/endpoints/charts/user/following.ts @@ -1,7 +1,8 @@ import $ from 'cafy'; import define from '../../../define'; -import perUserFollowingChart from '../../../../../services/chart/per-user-following'; +import perUserFollowingChart, { perUserFollowingLogSchema } from '../../../../../services/chart/per-user-following'; import ID, { transform } from '../../../../../misc/cafy-id'; +import { convertLog } from '../../../../../services/chart'; export const meta = { stability: 'stable', @@ -38,12 +39,7 @@ export const meta = { } }, - res: { - type: 'array', - items: { - type: 'object', - }, - }, + res: convertLog(perUserFollowingLogSchema), }; export default define(meta, async (ps) => { diff --git a/src/services/chart/per-user-following.ts b/src/services/chart/per-user-following.ts index 9d6d347ef6..8a94a4f155 100644 --- a/src/services/chart/per-user-following.ts +++ b/src/services/chart/per-user-following.ts @@ -2,56 +2,90 @@ import autobind from 'autobind-decorator'; import Chart, { Obj } from './'; import Following from '../../models/following'; import { IUser, isLocalUser } from '../../models/user'; +import { SchemaType } from '../../misc/schema'; -/** - * ユーザーごとのフォローに関するチャート - */ -type PerUserFollowingLog = { - local: { - /** - * フォローしている - */ - followings: { +export const logSchema = { + /** + * フォローしている + */ + followings: { + type: 'object' as 'object', + properties: { /** - * 合計 + * フォローしている合計 */ - total: number; + total: { + type: 'number', + description: 'フォローしている合計', + }, /** * フォローした数 */ - inc: number; + inc: { + type: 'number', + description: 'フォローした数', + }, /** * フォロー解除した数 */ - dec: number; - }; + dec: { + type: 'number', + description: 'フォロー解除した数', + }, + } + }, - /** - * フォローされている - */ - followers: { + /** + * フォローされている + */ + followers: { + type: 'object' as 'object', + properties: { /** - * 合計 + * フォローされている合計 */ - total: number; + total: { + type: 'number', + description: 'フォローされている合計', + }, /** * フォローされた数 */ - inc: number; + inc: { + type: 'number', + description: 'フォローされた数', + }, /** * フォロー解除された数 */ - dec: number; - }; - }; - - remote: PerUserFollowingLog['local']; + dec: { + type: 'number', + description: 'フォロー解除された数', + }, + } + }, }; +export const perUserFollowingLogSchema = { + type: 'object' as 'object', + properties: { + local: { + type: 'object' as 'object', + properties: logSchema + }, + remote: { + type: 'object' as 'object', + properties: logSchema + }, + } +}; + +type PerUserFollowingLog = SchemaType; + class PerUserFollowingChart extends Chart { constructor() { super('perUserFollowing', true);