dunbot / source /database /model /thread.sqlite3.js
Duongkum999's picture
Upload 56 files
91d9d20 verified
Raw
History Blame Contribute Delete
3.71 kB
var { apis } = global.mira;
var log = require("../../lib/log");
var { getType } = require("../../lib/utils");
module.exports = async function ThreadDataBase(SQL, sql) {
var Thread = SQL.define("Thread", {
threadID: {
type: sql.BIGINT,
unique: true
},
name: {
type: sql.STRING,
allowNull: false,
validate: {
notEmpty: true
}
},
info: {
type: sql.JSON,
validate: {
isJSON: value => JSON.stringify(value)
}
},
data: {
type: sql.JSON,
validate: {
isJSON: value => JSON.stringify(value)
}
},
banAt: {
type: sql.BIGINT,
defaultValue: 0,
validate: {
isInt: true,
min: 0
}
},
reason: {
type: sql.STRING,
allowNull: true,
validate: {
notEmpty: true
}
}
});
Thread.sync({ force: false });
function getAll() {
return Thread.findAll();
}
function find(conditions = {}) {
if (getType(conditions) !== "Object")
throw new Error("conditions must be an JSON Object.");
return Thread.findAll({ where: conditions });
}
async function getInfo(threadID) {
if (isNaN(parseInt(threadID)))
throw new Error("ThreadID must be a string number.");
var infoObj = await apis.getThreadInfo(threadID);
return infoObj;
}
async function findOne(threadID) {
if (isNaN(parseInt(threadID)))
throw new Error("ThreadID must be a string number.");
var threadData = await Thread.findOne({ where: { threadID } });
if (!threadData) {
await createData(threadID);
return await findOne(threadID);
}
return threadData.get({ plain: true });
}
async function createData(threadID) {
var info = await getInfo(threadID);
var infoObj = {
threadID,
name: info.name,
money: 0,
info,
data: {}
}
delete infoObj.info.name;
await Thread.findOrCreate({ where: { threadID }, defaults: infoObj });
log.info("database.create.success", threadID);
return;
}
async function setData(threadID, data) {
if (isNaN(parseInt(threadID)))
throw new Error("ThreadID must be a string number.");
if (getType(data) !== "Object")
throw new Error("data must be an JSON Object.");
await Thread.update(data, { where: { threadID } });
return;
}
async function setDataAll(data, conditions = {}) {
if (getType(conditions) !== "Object")
throw new Error("conditions must be an JSON Object.");
if (getType(data) !== "Object")
throw new Error("data must be an JSON Object.");
await Thread.update(data, { where: conditions });
return;
}
async function deleteThread(threadID) {
if (isNaN(parseInt(threadID)))
throw new Error("threadID must be a string number.");
await Thread.destroy({ where: { threadID } });
return;
}
log.info("database.model", "Thread.sqlite3");
return global.database.model.Thread = {
getAll,
find,
findOne,
setData,
setDataAll,
deleteThread
}
}