feat(dashboard): add support for importing/exporting cases

This commit is contained in:
Dragory 2021-11-03 00:05:53 +02:00
parent f3dae65747
commit 45941e47d6
No known key found for this signature in database
GPG key ID: 5F387BA66DF8AAC1
9 changed files with 593 additions and 2 deletions

View file

@ -4,7 +4,8 @@ import { CaseTypes } from "./CaseTypes";
import { connection } from "./db";
import { Case } from "./entities/Case";
import { CaseNote } from "./entities/CaseNote";
import moment = require("moment-timezone");
import moment from "moment-timezone";
import { chunkArray } from "../utils";
import { Queue } from "../Queue";
const CASE_SUMMARY_REASON_MAX_LENGTH = 300;
@ -111,6 +112,26 @@ export class GuildCases extends BaseGuildRepository {
});
}
async getMinCaseNumber(): Promise<number> {
const result = await this.cases
.createQueryBuilder()
.where("guild_id = :guildId", { guildId: this.guildId })
.select(["MIN(case_number) AS min_case_number"])
.getRawOne<{ min_case_number: number }>();
return result?.min_case_number || 0;
}
async getMaxCaseNumber(): Promise<number> {
const result = await this.cases
.createQueryBuilder()
.where("guild_id = :guildId", { guildId: this.guildId })
.select(["MAX(case_number) AS max_case_number"])
.getRawOne<{ max_case_number: number }>();
return result?.max_case_number || 0;
}
async setHidden(id: number, hidden: boolean): Promise<void> {
await this.cases.update(
{ id },
@ -197,4 +218,42 @@ export class GuildCases extends BaseGuildRepository {
case_id: caseId,
});
}
async deleteAllCases(): Promise<void> {
const idRows = await this.cases
.createQueryBuilder()
.where("guild_id = :guildId", { guildId: this.guildId })
.select(["id"])
.getRawMany<{ id: number }>();
const ids = idRows.map((r) => r.id);
const batches = chunkArray(ids, 500);
for (const batch of batches) {
await this.cases.createQueryBuilder().where("id IN (:ids)", { ids: batch }).delete().execute();
}
}
async bumpCaseNumbers(amount: number): Promise<void> {
await this.cases
.createQueryBuilder()
.where("guild_id = :guildId", { guildId: this.guildId })
.update()
.set({
case_number: () => `case_number + ${parseInt(amount as unknown as string, 10)}`,
})
.execute();
}
getExportCases(skip: number, take: number): Promise<Case[]> {
return this.cases.find({
where: {
guild_id: this.guildId,
},
relations: ["notes"],
order: {
case_number: "ASC",
},
skip,
take,
});
}
}