Spaces:
Paused
Paused
| var { DataBase } = global.mira.config.systemOptions; | |
| var log = require("../lib/log"); | |
| async function SQLiteDataBase(firstConnect = true) { | |
| var sql = require("sequelize"); | |
| var SQL = new sql({ | |
| dialect: "sqlite", | |
| storage: __dirname + "/database.sqlite", | |
| pool: { | |
| max: 20, | |
| min: 0, | |
| acquire: 60000, | |
| idle: 20000 | |
| }, | |
| retry: { | |
| match: [ | |
| /SQLITE_BUSY/, | |
| ], | |
| name: "query", | |
| max: 20 | |
| }, | |
| logging: false, | |
| transactionType: "IMMEDIATE", | |
| define: { | |
| underscored: false, | |
| freezeTableName: true, | |
| charset: "utf8", | |
| dialectOptions: { | |
| collate: "utf8_general_ci" | |
| }, | |
| timestamps: true | |
| }, | |
| sync: { | |
| force: false | |
| } | |
| }); | |
| try { | |
| await SQL.authenticate(); | |
| log.info("database.authenticate.type", "SQLite"); | |
| await require("./model/user.sqlite3.js")(SQL, sql); | |
| await require("./model/thread.sqlite3.js")(SQL, sql); | |
| return log.wall(); | |
| } catch (error) { | |
| log.error("database.authenticate.error", "SQLite", error.message); | |
| console.log(error); | |
| if (firstConnect) { | |
| log.warn("database.reAuthenticated", "MongoDB"); | |
| var newConfig = global.mira.config; | |
| newConfig.systemOptions.DataBase.type = "mongodb"; | |
| global.mira.config = newConfig; | |
| return MongoDataBase(false); | |
| } else | |
| process.exit(1); | |
| } | |
| } | |
| async function MongoDataBase(firstConnect = true) { | |
| var { mongoURI } = DataBase; | |
| var Mongo = require("mongoose"); | |
| var mongoRegex = /^(mongodb:\/\/|mongodb+srv:\/\/)[\w.-]+(:\d{2,5})?(\/[\w.-]*)?(\?.*)?$/; | |
| try { | |
| if (!mongoRegex.test(mongoURI)) | |
| throw new Error("mongoURI is invalid."); | |
| await Mongo.connect(mongoURI); | |
| log.info("database.authenticate.type", "MongoDB"); | |
| await require("./model/user.mongodb.js")(Mongo); | |
| await require("./model/thread.mongodb.js")(Mongo); | |
| return log.wall(); | |
| } catch (error) { | |
| log.error("database.authenticate.error", "MongoDB", error.message); | |
| console.log(error); | |
| if (firstConnect) { | |
| log.warn("database.reAuthenticated", "SQLite"); | |
| var newConfig = global.mira.config; | |
| newConfig.systemOptions.DataBase.type = "sqlite"; | |
| global.mira.config = newConfig; | |
| return SQLiteDataBase(false); | |
| } else | |
| process.exit(1); | |
| } | |
| } | |
| if (DataBase.type !== "sqlite" && DataBase.type !== "mongodb") { | |
| log.warn("database.notSupport", DataBase.type); | |
| log.warn("database.defaultType"); | |
| var newConfig = global.mira.config; | |
| newConfig.systemOptions.DataBase.type = "sqlite"; | |
| global.mira.config = newConfig; | |
| } | |
| module.exports = DataBase.type.toLowerCase() === "sqlite" ? SQLiteDataBase : MongoDataBase; |