server-factory.js 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. const autoCrud = require('./index')
  2. const database = require('../lib/database')
  3. const Sequelize = require('sequelize')
  4. const C = require('../lib/controllers')
  5. const controller = require('../lib/crud/controller')
  6. const { defaults, routes } = require('../lib/crud')
  7. const resolveType = (o) => {
  8. let type = Sequelize[o.__type]
  9. if (o.__args) {
  10. type = type.apply(Sequelize, o.__args)
  11. }
  12. return type
  13. }
  14. const serverFactory = (app) => {
  15. const cruds = autoCrud._getCruds()
  16. cruds.forEach(crud => {
  17. crud = defaults(crud)
  18. // Schema
  19. for (let key in crud.schema) {
  20. const field = crud.schema[key]
  21. if (field.__type) {
  22. crud.schema[key] = resolveType(field)
  23. } else {
  24. if (field.type) field.type = resolveType(field.type)
  25. if (field.defaultValue) field.defaultValue = resolveType(field.defaultValue)
  26. }
  27. }
  28. const Type = database[crud.pascalName] = database.sequelize.define(crud.camelName, crud.schema, crud.options)
  29. // Controller
  30. const ctrl = C[crud.camelName] = controller({
  31. Type,
  32. camelName: crud.camelName
  33. })
  34. // Routes
  35. routes(Object.assign({ app, controller:ctrl }, crud))
  36. })
  37. }
  38. module.exports = serverFactory