import type { KVs } from "../core.js"; import Chart from "../core.js"; import { Notes } from "@/models/index.js"; import { Not, IsNull } from "typeorm"; import type { Note } from "@/models/entities/note.js"; import { name, schema } from "./entities/notes.js"; /** * ノートに関するチャート */ export default class NotesChart extends Chart { constructor() { super(name, schema); } protected async tickMajor(): Promise>> { const [localCount, remoteCount] = await Promise.all([ Notes.countBy({ userHost: IsNull() }), Notes.countBy({ userHost: Not(IsNull()) }), ]); return { "local.total": localCount, "remote.total": remoteCount, }; } protected async tickMinor(): Promise>> { return {}; } public async update(note: Note, isAdditional: boolean): Promise { const prefix = note.userHost === null ? "local" : "remote"; await this.commit({ [`${prefix}.total`]: isAdditional ? 1 : -1, [`${prefix}.inc`]: isAdditional ? 1 : 0, [`${prefix}.dec`]: isAdditional ? 0 : 1, [`${prefix}.diffs.normal`]: note.replyId == null && note.renoteId == null ? isAdditional ? 1 : -1 : 0, [`${prefix}.diffs.renote`]: note.renoteId != null ? (isAdditional ? 1 : -1) : 0, [`${prefix}.diffs.reply`]: note.replyId != null ? (isAdditional ? 1 : -1) : 0, [`${prefix}.diffs.withFile`]: note.fileIds.length > 0 ? (isAdditional ? 1 : -1) : 0, }); } }