Files
alphane.ca/api/src/db/db-migration-client.ts
T
2026-06-19 22:20:43 -07:00

55 lines
1.7 KiB
TypeScript

import path from "path"
import knex, { Knex } from "knex"
import { isEmpty, isNil, merge } from "lodash"
import { DB_DATABASE, DB_HOST, DB_PASSWORD, DB_PORT, DB_USERNAME, NODE_ENV } from "@/config"
if (isEmpty(DB_DATABASE)) throw new Error("database name is unset.")
if (isEmpty(DB_USERNAME)) throw new Error("database username is unset.")
if (isEmpty(DB_PASSWORD)) throw new Error("database password is unset.")
if (isEmpty(DB_HOST)) throw new Error("database host is unset.")
if (isNil(DB_PORT) || isNaN(DB_PORT)) throw new Error("database port is unset.")
export function buildKnexConfig(options?: Knex.Config): Knex.Config {
return merge(
{
client: "pg",
connection: {
host: DB_HOST,
user: DB_USERNAME,
password: DB_PASSWORD,
database: DB_DATABASE,
port: DB_PORT,
ssl:
NODE_ENV !== "production"
? false
: {
require: true, // Enforce SSL
rejectUnauthorized: false, // Disable certificate verification (common for Azure)
},
/* options: {
encrypt: true,
trustServerCertificate: DB_TRUST_SERVER_CERTIFICATE,
}, */
},
migrations: {
directory: path.resolve(__dirname, "./migrations"),
extension: "ts",
stub: path.resolve(__dirname, "./templates/sample-migration.ts"),
},
seeds: {
directory: path.resolve(__dirname, `./seeds/${NODE_ENV}`),
extension: "ts",
stub: path.resolve(__dirname, "./templates/sample-seed.ts"),
},
},
options
)
}
const config = buildKnexConfig()
const dbMigrationClient = knex(config)
export default dbMigrationClient