wwebjs-mysql
Version:
A MySQL plugin for whatsapp-web.js library
47 lines (40 loc) • 2.35 kB
JavaScript
const fs = require('fs');
class MysqlStore {
constructor({ pool, tableInfo } = {}) {
if(!pool) throw new Error('A valid MySQL Connection Pool is required for MysqlStore.');
if(!tableInfo) throw new Error('A valid Table Information is required for MysqlStore.');
this.pool = pool;
this.tableInfo = tableInfo;
}
async sessionExists(options) {
const connection = await this.pool.getConnection();
const [rows] = await connection.execute( `SELECT COUNT(\`${this.tableInfo.session_column}\`) as count FROM \`${this.tableInfo.table}\` WHERE \`${this.tableInfo.session_column}\` = ?`, [options.session]);
connection.release();
return rows[0].count > 0;
}
async save(options) {
const connection = await this.pool.getConnection();
const fileBuffer = fs.readFileSync(`${options.session}.zip`);
const [rows] = await connection.execute( `SELECT COUNT(\`${this.tableInfo.session_column}\`) as count FROM \`${this.tableInfo.table}\` WHERE \`${this.tableInfo.session_column}\` = ?`, [options.session]);
if (rows[0].count == 0) {
await connection.execute(`INSERT INTO \`${this.tableInfo.table}\` (\`${this.tableInfo.session_column}\`, \`${this.tableInfo.data_column}\`) VALUES (?, ?)`, [options.session, fileBuffer]);
} else {
await connection.execute(`UPDATE \`${this.tableInfo.table}\` SET \`${this.tableInfo.data_column}\` = ?, \`${this.tableInfo.updated_at_column}\` = NOW() WHERE \`${this.tableInfo.session_column}\` = ?`, [fileBuffer, options.session]);
}
connection.release();
}
async extract(options) {
const connection = await this.pool.getConnection();
const [rows] = await connection.execute(`SELECT \`${this.tableInfo.data_column}\` FROM \`${this.tableInfo.table}\` WHERE \`${this.tableInfo.session_column}\` = ?`, [options.session]);
if (rows.length) {
fs.writeFileSync(options.path, rows[0].data);
}
connection.release();
}
async delete(options) {
const connection = await this.pool.getConnection();
await connection.execute(`DELETE FROM \`${this.tableInfo.table}\` WHERE \`${this.tableInfo.session_column}\` = ?`, [options.session]);
connection.release();
}
}
module.exports = MysqlStore;