import { Sequelize, Model, DataTypes, Op } from "sequelize"; import log4js from "log4js"; const logger = log4js.getLogger("db") const sequelize = new Sequelize({ dialect: 'sqlite', storage: process.env.DB_PATH || './data/data.db' }) let dbReady = false; class Messgae extends Model {} Messgae.init({ id: { type: DataTypes.INTEGER, autoIncrement: true, primaryKey: true }, sender: { type: DataTypes.STRING, allowNull: false }, message: { type: DataTypes.STRING, allowNull: false }, sendtime: { type: DataTypes.INTEGER, allowNull: false } }, { sequelize, modelName: "Message" }); try { await sequelize.authenticate(); logger.info("Database connection has been established successfully."); dbReady = true; } catch (err) { logger.error("Unable to connect to the database:" + err); } try { if(dbReady) { await Messgae.sync(); logger.info("Table created successfully."); } } catch (error) { logger.error("Unable to create table:" + error) } export function loadHistory(limit = 10) { if (!dbReady) { return []; } return Messgae.findAll({ limit: limit, order: [['sendtime', 'DESC']], attributes: ['id', 'sender', 'message', 'sendtime'] }) } export function queryHistory(start, end, limit, order) { if (!dbReady) { return []; } return Messgae.findAll({ limit: limit, order: [['sendtime', order]], attributes: ['id', 'sender', 'message', 'sendtime'], where: { sendtime: { [Op.between]: [start, end] } } }); } export function saveToDatabase(sender, msg, time) { const messageItem = Messgae.build({ sender: sender, message: msg, sendtime: time }); messageItem.save().then(() => { logger.debug(`message saved, sender: ${sender}, message: ${msg}`) }).catch((err) => { logger.error(`message save failed, sender: ${sender}, message: ${msg}, error: ${err}`) }) } export function getDatabaseState() { return dbReady }