mizzkey/packages/backend/src/server/api/endpoints/stats.ts
tamaina efb0ffc4ec
refactor: APIエンドポイントファイルの定義を良い感じにする (#8154)
* Fix API Schema Error

* Delete SimpleSchema/SimpleObj
and Move schemas to dedicated files

* Userのスキーマを分割してみる

* define packMany type

* add ,

* Ensure enum schema and Make "as const" put once

* test?

* Revert "test?"

This reverts commit 97dc9bfa70.

* Revert "Fix API Schema Error"

This reverts commit 21b6176d97.

* ✌️

* clean up

* test?

* wip

* wip

* better schema def

* ✌️

* fix

* add minLength property

* wip

* wip

* wip

* anyOf/oneOf/allOfに対応? ~ relation.ts

* refactor!

* Define MinimumSchema

* wip

* wip

* anyOf/oneOf/allOfが動作するようにUnionSchemaTypeを修正

* anyOf/oneOf/allOfが動作するようにUnionSchemaTypeを修正

* Update packages/backend/src/misc/schema.ts

Co-authored-by: Acid Chicken (硫酸鶏) <root@acid-chicken.com>

* fix

* array oneOfをより正確な型に

* array oneOfをより正確な型に

* wip

* ✌️

* なんかもういろいろ

* remove

* very good schema

* api schema

* wip

* refactor: awaitAllの型定義を変えてみる

* fix

* specify types in awaitAll

* specify types in awaitAll

* ✌️

* wip

* ...

* ✌️

* AllowDateはやめておく

* 不必要なoptional: false, nullable: falseを廃止

* Packedが展開されないように

* 続packed

* wip

* define note type

* wip

* UserDetailedをMeDetailedかUserDetailedNotMeかを区別できるように

* wip

* wip

* wip specify user type of other schemas

* ok

* convertSchemaToOpenApiSchemaを改修

* convertSchemaToOpenApiSchemaを改修

* Fix

* fix

* ✌️

* wip

* 分割代入ではなくallOfで定義するように

Co-authored-by: Acid Chicken (硫酸鶏) <root@acid-chicken.com>
2022-01-18 22:27:10 +09:00

85 lines
2 KiB
TypeScript

import define from '../define';
import { NoteReactions, Notes, Users } from '@/models/index';
import { federationChart, driveChart } from '@/services/chart/index';
export const meta = {
requireCredential: false,
tags: ['meta'],
params: {
},
res: {
type: 'object',
optional: false, nullable: false,
properties: {
notesCount: {
type: 'number',
optional: false, nullable: false,
},
originalNotesCount: {
type: 'number',
optional: false, nullable: false,
},
usersCount: {
type: 'number',
optional: false, nullable: false,
},
originalUsersCount: {
type: 'number',
optional: false, nullable: false,
},
instances: {
type: 'number',
optional: false, nullable: false,
},
driveUsageLocal: {
type: 'number',
optional: false, nullable: false,
},
driveUsageRemote: {
type: 'number',
optional: false, nullable: false,
},
},
},
} as const;
// eslint-disable-next-line import/no-default-export
export default define(meta, async () => {
const [
notesCount,
originalNotesCount,
usersCount,
originalUsersCount,
reactionsCount,
//originalReactionsCount,
instances,
driveUsageLocal,
driveUsageRemote,
] = await Promise.all([
Notes.count({ cache: 3600000 }), // 1 hour
Notes.count({ where: { userHost: null }, cache: 3600000 }),
Users.count({ cache: 3600000 }),
Users.count({ where: { host: null }, cache: 3600000 }),
NoteReactions.count({ cache: 3600000 }), // 1 hour
//NoteReactions.count({ where: { userHost: null }, cache: 3600000 }),
federationChart.getChart('hour', 1, null).then(chart => chart.instance.total[0]),
driveChart.getChart('hour', 1, null).then(chart => chart.local.totalSize[0]),
driveChart.getChart('hour', 1, null).then(chart => chart.remote.totalSize[0]),
]);
return {
notesCount,
originalNotesCount,
usersCount,
originalUsersCount,
reactionsCount,
//originalReactionsCount,
instances,
driveUsageLocal,
driveUsageRemote,
};
});