lisa-box
Version:
Home automation system L.I.S.A.
135 lines (121 loc) • 4.63 kB
JavaScript
const logger = require('./log').logger
/**
* Database Configuration
* (app.config.database)
*
* Configure the ORM layer, connections, etc.
*
* @see {@link http://trailsjs.io/doc/config/database}
*/
module.exports = {
/**
* Define the database stores. A store is typically a single database.
*
* Use the SQLite3 by default for development purposes.
*
* Set production connection info in config/env/production.js
*/
stores: {
/**
* Define a store called "local" which uses SQLite3 to persist data.
*/
sqlite: {
database: 'lisa',
storage: './lisa.sqlite',
host: '127.0.0.1',
dialect: 'sqlite',
logging: false,/// logger.debug,
define: {
hooks: {
afterCreate: (instance, options, fn) => {
const app = instance.sequelize.trailsApp
const modelName = instance.Model.name.toLowerCase()
//For notification we send event only to user room not globally
if (modelName === 'notification') {
app.services.NotificationService.sendWebNotification(instance)
}
else {
if (app.sockets.room) {
app.sockets.room(modelName).send('create', modelName, instance)
}
}
if (modelName === 'device' || modelName === 'room' || modelName.toLowerCase() === 'chatbotparamlist') {
app.services.ChatBotService.reloadBots().then(() => fn()).catch(err => fn())
}
else {
fn()
}
},
afterUpdate: (instance, options, fn) => {
const app = instance.sequelize.trailsApp
const modelName = instance.Model.name.toLowerCase()
app.sockets.room(modelName).send('update', modelName, instance)
if (modelName === 'room' || modelName === 'chatbotparamlist') {
app.services.ChatBotService.reloadBots().then(() => fn()).catch(err => {
app.log.error(err)
fn()
})
}
else {
fn()
}
},
afterBulkUpdate: (instance, fn) => {
if (!instance.attributes.id) return fn()
const app = instance.model.sequelize.trailsApp
const modelName = instance.model.name.toLowerCase()
if (modelName === 'room' || modelName.toLowerCase() === 'chatbotparamlist') {
app.services.ChatBotService.reloadBots().then(() => {
}).catch(err => {
app.log.error(err)
})
}
instance.model.findAll({ where: instance.where }).then(models => {
if (modelName === 'device') {
instance.model.findAll({ where: { roomID: models[0].roomId } }).then(devices => {
const group = app.services.DashboardService.getAdditionalGroupDevice(models[0].roomId, devices, models[0].type)
for (const m of group) {
app.sockets.room(modelName).send('update', modelName, m)
}
}).catch(err => app.log.error(err))
}
for (const m of models) {
app.sockets.room(modelName).send('update', modelName, m)
}
fn()
})
},
afterDestroy: (instance, options, fn) => {
const app = instance.sequelize.trailsApp
const modelName = instance.Model.name.toLowerCase()
if (modelName === 'device' || modelName === 'room' || modelName.toLowerCase() === 'chatbotparamlist') {
app.services.ChatBotService.reloadBots().then(() => {
}).catch(err => {
app.log.error(err)
})
}
app.sockets.room(modelName).send('destroy', modelName, instance)
fn()
},
afterBulkDestroy: (instance, fn) => {
if (!instance.where.id) return fn()
const app = instance.model.sequelize.trailsApp
const modelName = instance.model.name.toLowerCase()
if (modelName === 'device' || modelName === 'room' || modelName.toLowerCase() === 'chatbotparamlist') {
app.services.ChatBotService.reloadBots().then(() => {
}).catch(err => {
app.log.error(err)
})
}
app.sockets.room(modelName).send('destroy', modelName, instance.where.id)
fn()
},
}
}
}
},
models: {
defaultStore: 'sqlite',
migrate: 'alter'
}
}