11import { ServiceRegistry } from '@openforis/arena-core'
22
33import { DBMigrator } from '../../db'
4+ import { Logger } from '../../log'
45import { ProcessEnv } from '../../processEnv'
56import { ArenaApp } from '../arenaApp'
67import { InitAppOptions , initApp } from './initApp'
78import { registerServices } from './registerServices'
89import { start } from './start'
910import { stop } from './stop'
1011
12+ const logger : Logger = new Logger ( 'Arena server' )
13+
1114const initServices = ( ) : ServiceRegistry => {
1215 return registerServices ( )
1316}
1417
1518const 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+ }
0 commit comments