Наконец, я решил использовать вариант 2, и я перешел на Postgresql вместо mysql, потому что Postgresql использует подход, основанный на схемах!
Теперь мой окончательный код:
const postgresDB = new Sequelize('postgres://localhost:5432/test_enduser');
postgresDB.authenticate().then((err) => {
if (err) {
console.log('There is connection in ERROR.');
} else {
console.log('Postgres Connection has been established successfully');
}
});
postgresDB.define('inventory', {
name: Sequelize.STRING,
});
const createSchema = () => {
Business.findAll({
raw: true,
}).then((data) => {
data.forEach((client) => {
postgresDB.createSchema(client.code).then(() => {
Object.keys(postgresDB.models).forEach((currentItem) => {
postgresDB.models[currentItem].schema(client.code).sync();
});
// new schema is created
console.log('Postgres schema created');
}).catch((err) => {
console.log(err.message);
});
});
});
};
createSchema();
// apis
exports.getAllBusiness = (req, res) => {
postgresDB.models.inventory.schema(req.user.code).findAll()
.then((results) => {
res.send(results);
});
};
exports.postBusiness = (req, res) => {
const user = {
name: req.body.name,
};
postgresDB.models.inventory.schema(req.user.code).create(user)
.then(data => res.status(200).send(data))
.catch(Sequelize.ValidationError, err => res.status(422).send(err.errors[0].message))
.catch(err => res.status(400).send(err.message));
};
Я устанавливаюмое соединение postgres
Просто для теста я создаю таблицу с именем "инвентаризация"
В моем приложении пришла онлайн-заявка, и он регистрируется, а при регистрации я сохраняю там бизнес-код в своей таблице Business (Таблица Business приходит из отдельной базы данных (которая является супер основной базой данных приложения), поэтому я нахожу бизнес-код, циклы и создаю динамические схемы в postgres
Теперь посмотрите мой API, я делаю CRUD на основе req.user.code (из сеанса входа в систему), и я наконец-то сопоставляю показ данных в соответствии с конкретными схемами,
Итак, наконец, у меня есть чистые отдельные схемы для каждого клиента
Спасибо!