Files
cfw-autumn/scripts/migrations/database-functions.ts

61 lines
1.3 KiB
TypeScript

import { readFileSync } from "node:fs";
import { join } from "node:path";
import postgres from "postgres";
export const SQL_FUNCTION_FILES = [
"deductFromRollovers.sql",
"deductFromMainBalance.sql",
"unwindFromLockReceipt.sql",
"getTotalBalance.sql",
"deductFromAdditionalBalance.sql",
"getAvailableOverageFromSpendLimit.sql",
"performDeduction.sql",
"syncBalances.sql",
"syncBalancesV2.sql",
"resetCusEnts.sql",
] as const;
const SQL_DIR = join(
import.meta.dir,
"..",
"..",
"server",
"src",
"internal",
"balances",
"utils",
"sql",
);
export const shouldRequireSslForDatabaseFunctions = (databaseUrl: string) => {
const hostname = new URL(databaseUrl).hostname;
return hostname !== "localhost" && hostname !== "127.0.0.1";
};
export const initializeDatabaseFunctions = async (
databaseUrl = process.env.DATABASE_URL,
) => {
if (!databaseUrl) {
throw new Error("DATABASE_URL is required to initialize database functions");
}
const sql = postgres(databaseUrl, {
max: 1,
prepare: false,
connect_timeout: 30,
ssl: shouldRequireSslForDatabaseFunctions(databaseUrl)
? "require"
: undefined,
});
try {
for (const file of SQL_FUNCTION_FILES) {
const body = readFileSync(join(SQL_DIR, file), "utf8");
await sql.unsafe(body);
console.log(`loaded ${file}`);
}
} finally {
await sql.end({ timeout: 5 });
}
};