chat2/utils/storage.js

95 lines
2.1 KiB
JavaScript

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
}