diff options
| author | syuilo <syuilotan@yahoo.co.jp> | 2019-02-24 09:45:27 +0900 |
|---|---|---|
| committer | syuilo <syuilotan@yahoo.co.jp> | 2019-02-24 09:45:27 +0900 |
| commit | b679163d01b0152b38db658fe49d8a57c6aad930 (patch) | |
| tree | 9919cc598ed825c6841f47813010dac2d704614d /src/services/chart | |
| parent | Update schemas.ts (diff) | |
| download | misskey-b679163d01b0152b38db658fe49d8a57c6aad930.tar.gz misskey-b679163d01b0152b38db658fe49d8a57c6aad930.tar.bz2 misskey-b679163d01b0152b38db658fe49d8a57c6aad930.zip | |
Improve type definitions
Diffstat (limited to 'src/services/chart')
| -rw-r--r-- | src/services/chart/index.ts | 16 | ||||
| -rw-r--r-- | src/services/chart/notes.ts | 79 |
2 files changed, 62 insertions, 33 deletions
diff --git a/src/services/chart/index.ts b/src/services/chart/index.ts index 30ef2847d6..1e6ff0ca97 100644 --- a/src/services/chart/index.ts +++ b/src/services/chart/index.ts @@ -9,6 +9,7 @@ import * as mongo from 'mongodb'; import db from '../../db/mongodb'; import { ICollection } from 'monk'; import Logger from '../../misc/logger'; +import { Schema } from '../../prelude/schema'; const logger = new Logger('chart'); @@ -346,3 +347,18 @@ export default abstract class Chart<T extends Obj> { return res; } } + +export function convertLog(logSchema: Schema): Schema { + const v: Schema = JSON.parse(JSON.stringify(logSchema)); // copy + if (v.type === 'number') { + v.type = 'array'; + v.items = { + type: 'number' + }; + } else if (v.type === 'object') { + for (const k of Object.keys(v.properties)) { + v.properties[k] = convertLog(v.properties[k]); + } + } + return v; +} diff --git a/src/services/chart/notes.ts b/src/services/chart/notes.ts index 8f95f63638..d3704fed9a 100644 --- a/src/services/chart/notes.ts +++ b/src/services/chart/notes.ts @@ -2,48 +2,61 @@ import autobind from 'autobind-decorator'; import Chart, { Obj } from '.'; import Note, { INote } from '../../models/note'; import { isLocalUser } from '../../models/user'; +import { SchemaType } from '../../prelude/schema'; -/** - * 投稿に関するチャート - */ -type NotesLog = { - local: { - /** - * 集計期間時点での、全投稿数 - */ - total: number; +const logSchema = { + total: { + type: 'number' as 'number', + description: '集計期間時点での、全投稿数' + }, - /** - * 増加した投稿数 - */ - inc: number; + inc: { + type: 'number' as 'number', + description: '増加した投稿数' + }, - /** - * 減少した投稿数 - */ - dec: number; + dec: { + type: 'number' as 'number', + description: '減少した投稿数' + }, - diffs: { - /** - * 通常の投稿数の差分 - */ - normal: number; + diffs: { + type: 'object' as 'object', + properties: { + normal: { + type: 'number' as 'number', + description: '通常の投稿数の差分' + }, - /** - * リプライの投稿数の差分 - */ - reply: number; + reply: { + type: 'number' as 'number', + description: 'リプライの投稿数の差分' + }, - /** - * Renoteの投稿数の差分 - */ - renote: number; - }; - }; + renote: { + type: 'number' as 'number', + description: 'Renoteの投稿数の差分' + }, + } + }, +}; - remote: NotesLog['local']; +export const notesLogSchema = { + type: 'object' as 'object', + properties: { + local: { + type: 'object' as 'object', + properties: logSchema + }, + remote: { + type: 'object' as 'object', + properties: logSchema + }, + } }; +type NotesLog = SchemaType<typeof notesLogSchema>; + class NotesChart extends Chart<NotesLog> { constructor() { super('notes'); |