const redis = require('redis'); const config = require('komodo-sdk/config'); const logger = require('tektrans-logger'); const db = require('./db-mysql'); const DIRECTION_INCOMING = 0; const DIRECTION_OUTGOING = 1; let redisClient; if (!config.redis) { logger.warn('Undefined config.redis, messages counter will not work! #05A778E21D7E'); } else { redisClient = redis.createClient(config.redis); } if (!redisClient) { logger.warn('Undefined redisClient, messages counter will not work! #1D3EC165E8D9'); } function composeRedisCounterKeyword(origin, direction) { const directionLabel = Number(direction) === DIRECTION_OUTGOING ? 'OUT' : 'IN'; return `CALMA_MESSAGE_COUNTER_${origin}_${directionLabel}`; } function incrementCounter(origin, direction) { if (!redisClient) { logger.warn('Undefined redisClient, not incrementing messages counter! #FF8E765E12E2'); } else { redisClient.INCR(composeRedisCounterKeyword(origin, direction), () => {}); } } /** * Menyimpan pesan ke dalam archive histori pesan di database * * @param {object} params - objek pesan yang akan disimpan * @param {string} [params.origin_label] - label origin * @param {string} [params.origin=UNKNOWN] - digunakan sebagai label origin jika tdk ditentukan * @param {string} [params.origin_transport=UNKNOWN] - transport, misal SMS, TELEGRAM * @param {string} params.partner - pengirim / penerima * @param {string} [params.msg] - isi pesan * @param {string} [params.message] - isi pesan, jika params.msg tidak terdefinisi * @param {number} direction - 0: incoming, 1: outgoing */ function insert(xid, params, direction) { incrementCounter( params.origin_label || params.origin, direction, ); if (!db.pool) { logger.warn('MESSAGE-ARCHIVE: DB POOL is not ready to insert message history', { xid }); return; } const query = 'INSERT INTO messages SET ?'; const values = [{ origin_label: (params.origin_label || params.origin || 'UNKNOWN').trim(), origin_transport: (params.origin_transport || 'UNKNOWN').trim(), direction, partner: params.partner.trim(), message: (params.msg || params.message).trim(), }]; db.pool.query(query, values, async (err) => { if (err) { const fullQuery = await db.format(query, values); logger.warn(`MESSAGES-ARCHIVE: DB ERROR on inserting message. ${err.toString()}`, { xid, query: fullQuery }); } }); } exports.insert = insert; exports.DIRECTION_INCOMING = DIRECTION_INCOMING; exports.DIRECTION_OUTGOING = DIRECTION_OUTGOING;