forked from mirrors/iceshrimp
55 lines
1.3 KiB
TypeScript
55 lines
1.3 KiB
TypeScript
import type { KVs } from "../core.js";
|
|
import Chart from "../core.js";
|
|
import type { User } from "@/models/entities/user.js";
|
|
import { Notes } from "@/models/index.js";
|
|
import type { Note } from "@/models/entities/note.js";
|
|
import { name, schema } from "./entities/per-user-notes.js";
|
|
|
|
/**
|
|
* ユーザーごとのノートに関するチャート
|
|
*/
|
|
|
|
export default class PerUserNotesChart extends Chart<typeof schema> {
|
|
constructor() {
|
|
super(name, schema, true);
|
|
}
|
|
|
|
protected async tickMajor(
|
|
group: string,
|
|
): Promise<Partial<KVs<typeof schema>>> {
|
|
const [count] = await Promise.all([Notes.countBy({ userId: group })]);
|
|
|
|
return {
|
|
total: count,
|
|
};
|
|
}
|
|
|
|
protected async tickMinor(): Promise<Partial<KVs<typeof schema>>> {
|
|
return {};
|
|
}
|
|
|
|
public async update(
|
|
user: { id: User["id"] },
|
|
note: Note,
|
|
isAdditional: boolean,
|
|
): Promise<void> {
|
|
await this.commit(
|
|
{
|
|
total: isAdditional ? 1 : -1,
|
|
inc: isAdditional ? 1 : 0,
|
|
dec: isAdditional ? 0 : 1,
|
|
"diffs.normal":
|
|
note.replyId == null && note.renoteId == null
|
|
? isAdditional
|
|
? 1
|
|
: -1
|
|
: 0,
|
|
"diffs.renote": note.renoteId != null ? (isAdditional ? 1 : -1) : 0,
|
|
"diffs.reply": note.replyId != null ? (isAdditional ? 1 : -1) : 0,
|
|
"diffs.withFile": note.fileIds.length > 0 ? (isAdditional ? 1 : -1) : 0,
|
|
},
|
|
user.id,
|
|
);
|
|
}
|
|
}
|