Spaces:
Paused
Paused
File size: 3,711 Bytes
91d9d20 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 | 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
}
} |