schema-template.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. const { ObjectId } = require('mongoose').Types;
  2. const _ = require('lodash');
  3. const getModelTypeMock = (type) => {
  4. let obj = {};
  5. switch (type) {
  6. case 'String':
  7. case 'Boolean':
  8. obj.type = _.lowerCase(type);
  9. break;
  10. case 'Number':
  11. obj.type = _.lowerCase(type);
  12. obj.mock = 0;
  13. break;
  14. case 'Money':
  15. obj.type = 'integer';
  16. obj.mock = 1.1;
  17. break;
  18. case 'Object':
  19. obj.type = 'object';
  20. obj.mock = {};
  21. break;
  22. case 'Array':
  23. obj.type = 'array';
  24. obj.mock = [];
  25. break;
  26. case 'ObjectId':
  27. obj.type = 'string';
  28. obj.mock = ObjectId().toString();
  29. break;
  30. case 'Secret':
  31. obj.type = 'string';
  32. obj.mock = 'secret';
  33. break;
  34. default:
  35. break;
  36. }
  37. return obj;
  38. };
  39. module.exports = (tables) => {
  40. const result = {};
  41. for (const t of tables) {
  42. const { name, columns = [] } = t;
  43. const schema = { type: 'object' };
  44. const properties = {};
  45. for (const c of columns) {
  46. const { zh, type: ot, title } = c;
  47. const obj = {};
  48. const { type, mock } = getModelTypeMock(ot);
  49. obj['type'] = type;
  50. obj['title'] = zh;
  51. if (mock) obj['mock'] = { mock };
  52. Object.assign(properties, { [title]: obj });
  53. }
  54. schema.properties = properties;
  55. result[name] = schema;
  56. }
  57. return result;
  58. };