fenixenbot.js
Version:
Libreria Creacion De Bots De Discord
52 lines (43 loc) • 1.69 kB
JavaScript
const { DataTypes } = require('sequelize');
function SSchema(config) {
const { nameTable, items, options = {} } = config;
if (!nameTable) throw new Error("nameTable es obligatorio");
if (!Array.isArray(items)) throw new Error("items debe ser un array");
const typeMap = {
STRING: DataTypes.STRING,
TEXT: DataTypes.TEXT,
INTEGER: DataTypes.INTEGER,
FLOAT: DataTypes.FLOAT,
DOUBLE: DataTypes.DOUBLE,
NUMBER: DataTypes.INTEGER,
DECIMAL: DataTypes.DECIMAL,
BOOLEAN: DataTypes.BOOLEAN,
DATE: DataTypes.DATE,
DATEONLY: DataTypes.DATEONLY,
JSON: DataTypes.JSONB,
JSONB: DataTypes.JSONB,
ARRAY: DataTypes.ARRAY(DataTypes.STRING),
UUID: DataTypes.UUID,
ENUM: DataTypes.ENUM,
};
const schemaDefinition = {};
items.forEach(itemConfig => {
const { name, type, ...fieldOptions } = itemConfig;
if (!name || !type) throw new Error("name y type son obligatorios");
const sequelizeType = typeMap[type.toUpperCase()];
if (!sequelizeType) throw new Error(`Tipo inválido: ${type}`);
schemaDefinition[name] = {
type: sequelizeType,
...fieldOptions,
};
});
return (sequelizeInstance) => {
if (!sequelizeInstance) {
throw new Error("sequelizeInstance es undefined al definir el modelo");
}
const sequelizeModel = sequelizeInstance.define(nameTable, schemaDefinition, options);
sequelizeModel.modelName = nameTable;
return sequelizeModel;
};
}
module.exports = SSchema;