| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 | 
							- import async from "async";
 
- import config from "config";
 
- import mongoose from "mongoose";
 
- import bluebird from "bluebird";
 
- import fs from "fs";
 
- import { fileURLToPath } from "url";
 
- import path from "path";
 
- import CoreClass from "../../core";
 
- const __filename = fileURLToPath(import.meta.url);
 
- const __dirname = path.dirname(__filename);
 
- let MigrationModule;
 
- mongoose.Promise = bluebird;
 
- class _MigrationModule extends CoreClass {
 
- 	// eslint-disable-next-line require-jsdoc
 
- 	constructor() {
 
- 		super("migration");
 
- 		MigrationModule = this;
 
- 	}
 
- 	/**
 
- 	 * Initialises the migration module
 
- 	 *
 
- 	 * @returns {Promise} - returns promise (reject, resolve)
 
- 	 */
 
- 	initialize() {
 
- 		return new Promise((resolve, reject) => {
 
- 			this.models = {};
 
- 			const mongoUrl = config.get("mongo").url;
 
- 			mongoose
 
- 				.connect(mongoUrl, {
 
- 					useNewUrlParser: true,
 
- 					useUnifiedTopology: true
 
- 				})
 
- 				.then(async () => {
 
- 					mongoose.connection.on("error", err => this.log("ERROR", err));
 
- 					mongoose.connection.on("disconnected", () => {
 
- 						this.log("ERROR", "Disconnected, going to try to reconnect...");
 
- 						this.setStatus("RECONNECTING");
 
- 					});
 
- 					mongoose.connection.on("reconnected", () => {
 
- 						this.log("INFO", "Reconnected.");
 
- 						this.setStatus("READY");
 
- 					});
 
- 					mongoose.connection.on("reconnectFailed", () => {
 
- 						this.log("INFO", "Reconnect failed, stopping reconnecting.");
 
- 						this.setStatus("FAILED");
 
- 					});
 
- 					this.models = {
 
- 						song: mongoose.model("song", new mongoose.Schema({}, { strict: false })),
 
- 						queueSong: mongoose.model("queueSong", new mongoose.Schema({}, { strict: false })),
 
- 						station: mongoose.model("station", new mongoose.Schema({}, { strict: false })),
 
- 						user: mongoose.model("user", new mongoose.Schema({}, { strict: false })),
 
- 						activity: mongoose.model("activity", new mongoose.Schema({}, { strict: false })),
 
- 						playlist: mongoose.model("playlist", new mongoose.Schema({}, { strict: false })),
 
- 						news: mongoose.model("news", new mongoose.Schema({}, { strict: false })),
 
- 						report: mongoose.model("report", new mongoose.Schema({}, { strict: false })),
 
- 						punishment: mongoose.model("punishment", new mongoose.Schema({}, { strict: false })),
 
- 						ratings: mongoose.model("ratings", new mongoose.Schema({}, { strict: false }))
 
- 					};
 
- 					const files = fs.readdirSync(path.join(__dirname, "migrations"));
 
- 					const migrations = files.length;
 
- 					async.timesLimit(
 
- 						migrations,
 
- 						1,
 
- 						(index, next) => {
 
- 							MigrationModule.runJob("RUN_MIGRATION", { index: index + 1 }, null, -1)
 
- 								.then(() => next())
 
- 								.catch(err => next(err));
 
- 						},
 
- 						err => {
 
- 							if (err) console.log("Migration error", err);
 
- 							else console.log("Migration completed");
 
- 						}
 
- 					);
 
- 					resolve();
 
- 				})
 
- 				.catch(err => {
 
- 					this.log("ERROR", err);
 
- 					reject(err);
 
- 				});
 
- 		});
 
- 	}
 
- 	/**
 
- 	 * Returns a database model
 
- 	 *
 
- 	 * @param {object} payload - object containing the payload
 
- 	 * @param {object} payload.modelName - name of the model to get
 
- 	 * @returns {Promise} - returns promise (reject, resolve)
 
- 	 */
 
- 	GET_MODEL(payload) {
 
- 		return new Promise(resolve => {
 
- 			resolve(MigrationModule.models[payload.modelName]);
 
- 		});
 
- 	}
 
- 	/**
 
- 	 * Runs migrations
 
- 	 *
 
- 	 * @param {object} payload - object containing the payload
 
- 	 * @param {object} payload.index - migration index
 
- 	 * @returns {Promise} - returns promise (reject, resolve)
 
- 	 */
 
- 	RUN_MIGRATION(payload) {
 
- 		return new Promise((resolve, reject) => {
 
- 			import(`./migrations/migration${payload.index}`).then(module => {
 
- 				this.log("INFO", `Running migration ${payload.index}`);
 
- 				module.default
 
- 					.apply(this, [MigrationModule])
 
- 					.then(response => {
 
- 						resolve(response);
 
- 					})
 
- 					.catch(err => {
 
- 						reject(err);
 
- 					});
 
- 			});
 
- 		});
 
- 	}
 
- }
 
- export default new _MigrationModule();
 
 
  |