95 lines
2.1 KiB
JavaScript
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
|
|
} |