UNPKG

@xrengine/server-core

Version:

Shared components for XREngine server

66 lines (60 loc) 2.39 kB
import appRootPath from 'app-root-path' import fs from 'fs' import path from 'path' import { Application } from '../declarations' import config from './appconfig' import { copyDefaultProject, uploadLocalProjectToProvider } from './projects/project/project.class' import seederConfig from './seeder-config' const settingsServiceNames = [ 'authentication-setting', 'aws-setting', 'chargebee-setting', 'coil-setting', 'client-setting', 'email-setting', 'instance-server-setting', 'redis-setting', 'server-setting', 'task-server-setting' ] export async function seeder(app: Application, forceRefresh: boolean, prepareDb: boolean) { if (forceRefresh || prepareDb) for (let config of seederConfig) { if (config.path) { const templates = config.templates const service = app.service(config.path as any) if (templates) for (let template of templates) { let isSeeded if (settingsServiceNames.indexOf(config.path) > -1) { const result = await service.find() isSeeded = result.total > 0 } else { const searchTemplate = {} const sequelizeModel = service.Model const uniqueField = Object.values(sequelizeModel.rawAttributes).find((value: any) => value.unique) as any if (uniqueField) searchTemplate[uniqueField.fieldName] = template[uniqueField.fieldName] else for (let key of Object.keys(template)) if (typeof template[key] !== 'object') searchTemplate[key] = template[key] const result = await service.find({ query: searchTemplate }) isSeeded = result.total > 0 } if (!isSeeded) await service.create(template) } } } if (forceRefresh) { // for local dev clear the storage provider if (!config.kubernetes.enabled && !config.testEnabled) { const uploadPath = path.resolve(appRootPath.path, 'packages/server/upload/') if (fs.existsSync(uploadPath)) fs.rmSync(uploadPath, { recursive: true }) } copyDefaultProject() await app.service('project')._seedProject('default-project') await uploadLocalProjectToProvider('default-project') if (!config.kubernetes.enabled) await app.service('project')._fetchDevLocalProjects() } }