#mvl-db-handler Пакет предназначен для подключения ORM Sequelize к проектам на основе MVLoader.
После инициализации создается свойство App.DB, в котором находится активное соединение с БД.
Дополнительно создается свойство App.DB.S, в котором находится подключенный пакет Sequelize. Это позволяет из любого
места, где доступно подключение к БД через this.App.DB, быстро получать доступ к служебным сущностям,
таким как Op и аналогичным. Например, [this.App.DB.S.Op.and]
npm i mvl-db-handler --save
let config = {
ext: {
classes: {
handlers: {
DBHandler: DBHandler,
},
},
configs: {
handlers: {
DBHandler: {
sequelize: {
host: process.env.DB_HOST, // По умолчанию - localhost. Можно не указывать, если не отличается
port: process.env.DB_PORT, // По умолчанию - 3306. Можно не указывать, если не отличается
username: process.env.DB_USERNAME,
password: process.env.DB_PASSWORD,
database: process.env.DB_DATABASE,
},
models: {
mvlUser: require('./models/mvlUser'),
mvlUserGroup: require('./models/mvlUserGroup'),
}
}
}
}
},
};
let app = new App(config);
Помимо стандартного способа загрузки моделей с помощью методов Sequelize поддерживается загрузка из конфигурации.
В примере выше загружаются 2 модели: mvlUser и mvlUserGroup.
Пример содержимого модели:
module.exports = (Sequelize) => {
// Масссив из 3-х объектов
return [
// Поля модели
{
username: {
type: Sequelize.STRING,
defaultValue: '',
allowNull: false,
unique: true,
set(val) {
if (val === '' || typeof val !== 'string') {
val = this.getDataValue('username') !== '' ? this.getDataValue('username') : 'user_' + Date.now();
}
this.setDataValue('username', val);
}
},
// Остальные поля ниже
},
// Опции модели
{
hooks: {
beforeCreate: (user, options) => {
if (user.username === '') {
user.username = '';
}
},
},
},
// Ассоциации модели
{
'belongsToMany': [
{
model: 'mvlUserGroup',
as: 'Groups',
through: {
model: 'mvlUserGroupMember'
}
},
],
'hasMany': [
{
model: 'BotCMSUser',
},
],
'hasOne': [
{
model: 'mvlUserProfile',
as: 'Profile',
foreignKey: 'UserId',
}
],
}
];
};