diff --git a/src/services/storage/db.ts b/src/services/storage/db.ts index 0b480d86..9908154a 100644 --- a/src/services/storage/db.ts +++ b/src/services/storage/db.ts @@ -16,19 +16,37 @@ import { ApplicationUser } from "./entity/ApplicationUser.js" import { RoutingEvent } from "./entity/RoutingEvent.js" import { BalanceEvent } from "./entity/BalanceEvent.js" import { ChannelBalanceEvent } from "./entity/ChannelsBalanceEvent.js" +import { getLogger } from "../helpers/logger.js" export type DbSettings = { databaseFile: string + migrate: boolean } export const LoadDbSettingsFromEnv = (test = false): DbSettings => { - return { databaseFile: test ? ":memory:" : EnvMustBeNonEmptyString("DATABASE_FILE") } + return { + databaseFile: test ? ":memory:" : EnvMustBeNonEmptyString("DATABASE_FILE"), + migrate: process.env.MIGRATE_DB === 'true' || false + } } export default async (settings: DbSettings) => { - return new DataSource({ + const s = await new DataSource({ type: "sqlite", database: settings.databaseFile, - //logging: true, + // logging: true, entities: [User, UserReceivingInvoice, UserReceivingAddress, AddressReceivingTransaction, UserInvoicePayment, UserTransactionPayment, UserBasicAuth, UserEphemeralKey, Product, UserToUserPayment, Application, ApplicationUser, UserToUserPayment, RoutingEvent, BalanceEvent, ChannelBalanceEvent], - synchronize: true, + // synchronize: true, }).initialize() + const log = getLogger({}) + + const pendingMigrations = await s.showMigrations() + if (pendingMigrations) { + if (!settings.migrate) { + throw new Error("pending migrations found, run with: MIGRATE_DB=true") + } else { + log("migrations found, migrating...") + const migrations = await s.runMigrations() + log(migrations) + } + } + return s } \ No newline at end of file