UNPKG

legendaryjs

Version:

LegendaryJS – The ultimate backend framework for speed, power, and simplicity.

70 lines (58 loc) 2.17 kB
const mongoose = require('mongoose'); const { Sequelize, DataTypes } = require('sequelize'); const dbConfig = require('../../legendary.config').db; const connections = { mysql: null, postgres: null, }; function createModel({ name, db, fields }) { if (!name || !fields || !db) throw new Error('❌ Missing model name, db or fields'); if (db === 'mongo' && dbConfig.mongo) { // 🧠 Mongoose Schema Builder const schemaObj = {}; for (const key in fields) { const val = fields[key]; schemaObj[key] = typeof val === 'string' ? { type: eval(val) } : val; } const schema = new mongoose.Schema(schemaObj); return mongoose.model(name, schema); } if ((db === 'mysql' && dbConfig.mysql) || (db === 'postgres' && dbConfig.postgres)) { // 🔌 Connect Sequelize once if (!connections[db]) { const dialect = db; const dbName = process.env[`${db.toUpperCase()}_DB`] || 'legendarydb'; const dbUser = process.env[`${db.toUpperCase()}_USER`] || 'root'; const dbPass = process.env[`${db.toUpperCase()}_PASS`] || ''; const dbHost = process.env[`${db.toUpperCase()}_HOST`] || 'localhost'; connections[db] = new Sequelize(dbName, dbUser, dbPass, { host: dbHost, dialect, logging: false, }); } const sequelize = connections[db]; const modelFields = {}; for (const key in fields) { const val = fields[key]; modelFields[key] = typeof val === 'string' ? mapType(val) : val; } return sequelize.define(name, modelFields, { timestamps: false, }); } throw new Error('❌ Unsupported or inactive database'); } // 🔁 Type Mapper for Sequelize function mapType(type) { switch (type.toLowerCase()) { case 'string': return DataTypes.STRING; case 'int': case 'integer': return DataTypes.INTEGER; case 'float': return DataTypes.FLOAT; case 'boolean': return DataTypes.BOOLEAN; case 'date': return DataTypes.DATE; case 'text': return DataTypes.TEXT; default: return DataTypes.STRING; } } module.exports = { createModel };