forked from phenom/healer-man
Release Healer Man 0.1.58
This commit is contained in:
1 parent
14e105642c
commit
246b4832b0
38 files changed
+952
-93
No files matched your search
@@ -4,6 +4,7 @@ import policy from "../shared/dungeon-report-policy.json" with { type: "json" };
|
||||
|
||||
export const REPORT_DUNGEON_IDS = new Set([
|
||||
"bite-sized-stormwind-stockade",
|
||||
"randomized-bite-sized-stormwind-stockade",
|
||||
"forsaken-abbey",
|
||||
...Object.keys(availability.enabled),
|
||||
]);
|
||||
@@ -31,6 +32,15 @@ export function createDungeonReportRepository(database, { isGameMaster, ErrorTyp
|
||||
reviewed_by TEXT NOT NULL,
|
||||
reviewed_at INTEGER NOT NULL
|
||||
) STRICT;
|
||||
CREATE TABLE IF NOT EXISTS randomized_creature_readiness (
|
||||
creature_key TEXT PRIMARY KEY,
|
||||
dungeon_id TEXT NOT NULL,
|
||||
creature_name TEXT NOT NULL,
|
||||
creature_kind TEXT NOT NULL CHECK (creature_kind IN ('mob', 'boss')),
|
||||
status TEXT NOT NULL CHECK (status IN ('ready', 'needs-testing', 'not-ready')),
|
||||
reviewed_by TEXT NOT NULL,
|
||||
reviewed_at INTEGER NOT NULL
|
||||
) STRICT;
|
||||
`);
|
||||
const columns = new Set(database.prepare("PRAGMA table_info(dungeon_reports)").all().map((column) => column.name));
|
||||
if (!columns.has("boss_key")) database.exec("ALTER TABLE dungeon_reports ADD COLUMN boss_key TEXT");
|
||||
@@ -84,6 +94,39 @@ export function createDungeonReportRepository(database, { isGameMaster, ErrorTyp
|
||||
}
|
||||
|
||||
return {
|
||||
listRandomizedCreatureReadiness() {
|
||||
return { reviews: database.prepare("SELECT * FROM randomized_creature_readiness ORDER BY creature_kind, creature_name").all().map((row) => ({
|
||||
creatureKey: row.creature_key, dungeonId: row.dungeon_id, creatureName: row.creature_name,
|
||||
creatureKind: row.creature_kind, status: row.status, reviewedBy: row.reviewed_by,
|
||||
reviewedAt: Number(row.reviewed_at),
|
||||
})) };
|
||||
},
|
||||
saveRandomizedCreatureReadiness(account, input) {
|
||||
if (!isGameMaster(account)) throw new ErrorType("Game Master access is required.", 403, "gm_required");
|
||||
if (input?.dungeonId !== "randomized-bite-sized-stormwind-stockade"
|
||||
|| typeof input?.creatureKey !== "string" || !input.creatureKey.startsWith("stormwind-stockade:")
|
||||
|| input.creatureKey.length > 256 || typeof input?.creatureName !== "string"
|
||||
|| !input.creatureName.trim() || input.creatureName.length > 128
|
||||
|| !["mob", "boss"].includes(input.creatureKind)) {
|
||||
throw new ErrorType("Choose a valid randomized creature.", 400, "invalid_creature");
|
||||
}
|
||||
if (!["ready", "needs-testing", "not-ready"].includes(input.status)) {
|
||||
throw new ErrorType("Choose a valid creature readiness status.", 400, "invalid_creature_status");
|
||||
}
|
||||
const review = {
|
||||
creatureKey: input.creatureKey, dungeonId: input.dungeonId,
|
||||
creatureName: input.creatureName.trim(), creatureKind: input.creatureKind,
|
||||
status: input.status, reviewedBy: account.username, reviewedAt: Date.now(),
|
||||
};
|
||||
database.prepare(`INSERT INTO randomized_creature_readiness VALUES (?, ?, ?, ?, ?, ?, ?)
|
||||
ON CONFLICT(creature_key) DO UPDATE SET dungeon_id = excluded.dungeon_id,
|
||||
creature_name = excluded.creature_name, creature_kind = excluded.creature_kind,
|
||||
status = excluded.status, reviewed_by = excluded.reviewed_by,
|
||||
reviewed_at = excluded.reviewed_at`).run(
|
||||
review.creatureKey, review.dungeonId, review.creatureName, review.creatureKind,
|
||||
review.status, review.reviewedBy, review.reviewedAt);
|
||||
return review;
|
||||
},
|
||||
listBossTestingReviews() {
|
||||
return { reviews: database.prepare("SELECT * FROM boss_testing_reviews ORDER BY boss_key").all().map((row) => ({
|
||||
bossKey: row.boss_key, dungeonId: row.dungeon_id, bossName: row.boss_name,
|
||||
|
||||
Reference in new issue
Block a user