Skip to content

Commit 464a4b9

Browse files
authored
added options to skip public schema and survey schema db migrations (#172)
* added options to skip public schema and survey schema db migrations * added log info
1 parent 4400809 commit 464a4b9

3 files changed

Lines changed: 31 additions & 4 deletions

File tree

src/server/arenaServer/index.ts

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,24 @@
11
import { ServiceRegistry } from '@openforis/arena-core'
22

33
import { DBMigrator } from '../../db'
4+
import { Logger } from '../../log'
45
import { ProcessEnv } from '../../processEnv'
56
import { ArenaApp } from '../arenaApp'
67
import { InitAppOptions, initApp } from './initApp'
78
import { registerServices } from './registerServices'
89
import { start } from './start'
910
import { stop } from './stop'
1011

12+
const logger: Logger = new Logger('Arena server')
13+
1114
const initServices = (): ServiceRegistry => {
1215
return registerServices()
1316
}
1417

1518
const init = async (options?: InitAppOptions): Promise<ArenaApp> => {
1619
initServices()
1720
if (!ProcessEnv.disableDbMigrations) {
18-
await DBMigrator.migrateAll()
21+
await performDatabaseMigrations(options)
1922
}
2023
return initApp(options)
2124
}
@@ -28,3 +31,26 @@ export const ArenaServer = {
2831
start,
2932
stop,
3033
}
34+
const performDatabaseMigrations = async (options: InitAppOptions | undefined) => {
35+
const skipPublic = options?.skipPublicSchemaDbMigrations === true
36+
const skipSurvey = options?.skipSurveySchemaDbMigrations === true
37+
38+
// Preserve migration-level logging/error handling for the default path.
39+
if (!skipPublic && !skipSurvey) {
40+
await DBMigrator.migrateAll()
41+
} else {
42+
try {
43+
logger.info(`running database migrations (skip public schema: ${skipPublic}, skip survey schemas: ${skipSurvey})`)
44+
if (!skipPublic) {
45+
await DBMigrator.migrateSchema()
46+
}
47+
if (!skipSurvey) {
48+
await DBMigrator.migrateSurveySchemas()
49+
}
50+
logger.info('database migrations completed')
51+
} catch (error) {
52+
logger.error(`error running database migrations: ${String(error)}`)
53+
throw error
54+
}
55+
}
56+
}

src/server/arenaServer/initApp.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ import { Api } from '../../api'
1919
export interface InitAppOptions {
2020
fileSizeLimit?: number
2121
bodyParseLimit?: string
22+
skipPublicSchemaDbMigrations?: boolean
23+
skipSurveySchemaDbMigrations?: boolean
2224
}
2325

2426
const defaultOptions: InitAppOptions = {

src/server/arenaServer/start.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ import { onShutdown } from './stop'
1010

1111
const logger: Logger = new Logger('Arena server')
1212

13-
export const start = (app: ArenaApp): Promise<Server> => {
14-
return new Promise<Server>((resolve, reject) => {
13+
export const start = (app: ArenaApp): Promise<Server> =>
14+
new Promise<Server>((resolve, reject) => {
1515
logger.info(`server starting`)
1616
const port = ProcessEnv.arenaPort
1717

@@ -52,4 +52,3 @@ export const start = (app: ArenaApp): Promise<Server> => {
5252

5353
server.once('listening', onListening)
5454
})
55-
}

0 commit comments

Comments
 (0)