const autoCrud = require('./index') const database = require('../lib/database') const Sequelize = require('sequelize') const C = require('../lib/controllers') const controller = require('../lib/crud/controller') const { defaults, routes } = require('../lib/crud') const resolveType = (o) => { let type = Sequelize[o.__type] if (o.__args) { type = type.apply(Sequelize, o.__args) } return type } const serverFactory = (app) => { const cruds = autoCrud._getCruds() cruds.forEach(crud => { crud = defaults(crud) // Schema for (let key in crud.schema) { const field = crud.schema[key] if (field.__type) { crud.schema[key] = resolveType(field) } else { if (field.type) field.type = resolveType(field.type) if (field.defaultValue) field.defaultValue = resolveType(field.defaultValue) } } const Type = database[crud.pascalName] = database.sequelize.define(crud.camelName, crud.schema, crud.options) // Controller const ctrl = C[crud.camelName] = controller({ Type, camelName: crud.camelName }) // Routes if (crud.addServerRoutes !== false) { routes(Object.assign({ app, controller:ctrl }, crud)) } }) } module.exports = serverFactory