swagger-decorator
Version:
Decorator for Koa2 and koa-router, Auto-Generate Swagger Docs
87 lines (67 loc) • 2.6 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _assign = require("babel-runtime/core-js/object/assign");
var _assign2 = _interopRequireDefault(_assign);
var _keys = require("babel-runtime/core-js/object/keys");
var _keys2 = _interopRequireDefault(_keys);
exports.generateSequelizeModel = generateSequelizeModel;
var _type = require("../../entity/type");
var _singleton = require("../../internal/singleton");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var debug = require("debug")("sequelize");
var Sequelize = require("sequelize");
/**
* Description 构造 Sequelize 模型
* @param EntityClass 实体类
* @param manuelDefinition 其他自定义的模型定义
* @param mappingCamelCaseToUnderScore: 是否需要将 CamelCase 映射到 UnderScore
*/
function generateSequelizeModel(EntityClass, manuelDefinition) {
var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},
_ref$mappingCamelCase = _ref.mappingCamelCaseToUnderScore,
mappingCamelCaseToUnderScore = _ref$mappingCamelCase === undefined ? false : _ref$mappingCamelCase;
// 获取当前内部对象
var properties = (0, _type.inferenceEntityProperties)(EntityClass, _singleton.innerEntityObject);
// 获取当前目标对象的属性
var sequelizeDefinition = {};
for (var property in (0, _keys2.default)(properties)) {
var sequelizeProperty = void 0;
// 判断是否需要进行格式转换
if (mappingCamelCaseToUnderScore) {
sequelizeProperty = property.replace(/([A-Z])/g, function ($1) {
return "_" + $1.toLowerCase();
});
} else {
sequelizeProperty = property;
}
// 为当前属性生成相关联的 Sequelize 说明
sequelizeDefinition[sequelizeProperty] = (0, _assign2.default)({}, {
type: _mapType(properties[property].type),
defaultValue: properties[property].defaultValue
}, manuelDefinition[property]);
}
// 调试模式下打印生成的 Sequelize 模型定义
debug(sequelizeDefinition);
return sequelizeDefinition;
}
/**
* Description 映射数据类型
* @param type
* @returns {*}
* @private
*/
function _mapType(type) {
if (type === "integer") {
return Sequelize.INTEGER;
} else if (type === "string") {
return Sequelize.STRING;
} else if (type === "boolean") {
return Sequelize.BOOLEAN;
} else if (type === "dateTime" || type === "date") {
return Sequelize.DATE;
} else if (type === "object" || type === "array") {
return Sequelize.STRING;
}
}