@xrengine/server-core
Version:
Shared components for XREngine server
66 lines (60 loc) • 2.39 kB
text/typescript
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()
}
}