'use strict'; const db = require('../config').database; const { domain, name } = require('../config').server; const initModels = require('../models/init-models'); const Sequelize = db.sequelize; const models = initModels(Sequelize); const ConnectionsModel = models.connections; const addConnection = async data => { const r = await ConnectionsModel.create({ ...data, connect_domain: domain, connect_name: name }); return r; }; /** * Find or create connection to current server */ const addCurrentConnection = async data => { const [r, createdId] = await ConnectionsModel.findOrCreate({ where: { connect_domain: domain, connect_name: name, wa_id: data.wa_id }, defaults: { ...data, connect_domain: domain, connect_name: name, closetime: null }, }); return r; }; const updateConnection = async (data, where = {}) => { const r = await ConnectionsModel.update( { ...data, ...(data.status === 'open' ? { opentime: Sequelize.fn('NOW') } : {}), ...(['close', 'offline'].includes(data.status) ? { closetime: Sequelize.fn('NOW') } : {}), updatetime: Sequelize.fn('NOW'), }, { where: { ...where, wa_id: data.wa_id } }, ); return r; }; const getConnection = async data => { const r = await ConnectionsModel.findAll({ where: data, raw: true }); return r || []; }; const resetConnection = async () => { const r = await ConnectionsModel.update( { status: 'close', closetime: Sequelize.fn('NOW'), updatetime: Sequelize.fn('NOW'), }, { where: { connect_domain: domain, connect_name: name } }, ); return r; }; module.exports = { addConnection, addCurrentConnection, updateConnection, getConnection, resetConnection };