mirror of
https://github.com/ZeppelinBot/Zeppelin.git
synced 2025-05-10 12:25:02 +00:00
feat(dashboard): add support for importing/exporting cases
This commit is contained in:
parent
f3dae65747
commit
45941e47d6
9 changed files with 593 additions and 2 deletions
|
@ -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,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue