summaryrefslogtreecommitdiff
path: root/src/services/chart
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2019-02-24 09:45:27 +0900
committersyuilo <syuilotan@yahoo.co.jp>2019-02-24 09:45:27 +0900
commitb679163d01b0152b38db658fe49d8a57c6aad930 (patch)
tree9919cc598ed825c6841f47813010dac2d704614d /src/services/chart
parentUpdate schemas.ts (diff)
downloadmisskey-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.ts16
-rw-r--r--src/services/chart/notes.ts79
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');