fix: support legacy rank permission schema
CI / check (push) Successful in 27s
CI / release (push) Skipped
CI / deploy (push) Successful in 43s

This commit is contained in:
Simo committed 2026-08-31 21:01:13 +02:00
1 parent 384ede19c4
commit 37ad27c5f3
2 files changed
+60 -31

No files matched your search

+43 -19
View File
@@ -124,28 +124,52 @@ export async function fetchEmulatorRankForEdit(
);
if (rankRows.length === 0) return null;
await ensurePermissionRankColumn(db, rankId);
const rankColumn = getRankPermissionColumn(rankId);
const permissionRows = await rawRows<
{
permission_key: string;
max_value: number;
value: number | string | null;
}[]
>(
db,
sql`
SELECT permission_key, max_value, ${sql.raw(quoteIdentifier(rankColumn))} AS value
FROM permission_definitions
ORDER BY permission_key ASC
`,
);
const permissions: Record<string, string> = {};
const permissionMaxValues: Record<string, number> = {};
for (const row of permissionRows) {
permissions[row.permission_key] = String(row.value ?? 0);
permissionMaxValues[row.permission_key] = Number(row.max_value ?? 1);
const definitionColumns = await getTableColumns(db, "permission_definitions");
if (definitionColumns.has(rankColumn)) {
const permissionRows = await rawRows<
{
permission_key: string;
max_value: number;
value: number | string | null;
}[]
>(
db,
sql`
SELECT permission_key, max_value, ${sql.raw(quoteIdentifier(rankColumn))} AS value
FROM permission_definitions
ORDER BY permission_key ASC
`,
);
for (const permission of permissionRows) {
permissions[permission.permission_key] = String(permission.value ?? 0);
permissionMaxValues[permission.permission_key] = Number(
permission.max_value ?? 1,
);
}
} else {
const legacyRows = await rawRows<Record<string, unknown>[]>(
db,
sql`SELECT * FROM permissions WHERE id = ${rankId} LIMIT 1`,
);
for (const [key, value] of Object.entries(legacyRows[0] ?? {})) {
if (
key === "id" ||
RANK_GENERAL_FIELDS.has(key) ||
!VALID_KEY.test(key)
) {
continue;
}
const permissionValue =
typeof value === "string" || typeof value === "number"
? toPermissionValue(value)
: 0;
permissions[key] = String(permissionValue);
permissionMaxValues[key] = Math.max(1, permissionValue);
}
}
const row = rankRows[0];