import { Inject, Injectable } from '@nestjs/common'; import { IsNull } from 'typeorm'; import type { InstancesRepository, NoteReactionsRepository, NotesRepository, UsersRepository } from '@/models/index.js'; import { Endpoint } from '@/server/api/endpoint-base.js'; import { DI } from '@/di-symbols.js'; import NotesChart from '@/core/chart/charts/notes.js'; import UsersChart from '@/core/chart/charts/users.js'; export const meta = { requireCredential: false, tags: ['meta'], 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; export const paramDef = { type: 'object', properties: {}, required: [], } as const; // eslint-disable-next-line import/no-default-export @Injectable() export default class extends Endpoint { constructor( @Inject(DI.usersRepository) private usersRepository: UsersRepository, @Inject(DI.notesRepository) private notesRepository: NotesRepository, @Inject(DI.instancesRepository) private instancesRepository: InstancesRepository, @Inject(DI.noteReactionsRepository) private noteReactionsRepository: NoteReactionsRepository, private notesChart: NotesChart, private usersChart: UsersChart, ) { super(meta, paramDef, async () => { const notesChart = await this.notesChart.getChart('hour', 1, null); const notesCount = notesChart.local.total[0] + notesChart.remote.total[0]; const originalNotesCount = notesChart.local.total[0]; const usersChart = await this.usersChart.getChart('hour', 1, null); const usersCount = usersChart.local.total[0] + usersChart.remote.total[0]; const originalUsersCount = usersChart.local.total[0]; const [ reactionsCount, //originalReactionsCount, instances, ] = await Promise.all([ this.noteReactionsRepository.count({ cache: 3600000 }), // 1 hour //this.noteReactionsRepository.count({ where: { userHost: IsNull() }, cache: 3600000 }), this.instancesRepository.count({ cache: 3600000 }), ]); return { notesCount, originalNotesCount, usersCount, originalUsersCount, reactionsCount, //originalReactionsCount, instances, driveUsageLocal: 0, driveUsageRemote: 0, }; }); } }