|
@@ -6,11 +6,14 @@ import mongoose, {
|
|
|
MongooseDistinctQueryMiddleware,
|
|
|
MongooseQueryOrDocumentMiddleware
|
|
|
} from "mongoose";
|
|
|
+import { readdir } from "fs/promises";
|
|
|
+import path from "path";
|
|
|
import JobContext from "../JobContext";
|
|
|
import BaseModule, { ModuleStatus } from "../BaseModule";
|
|
|
import { UniqueMethods } from "../types/Modules";
|
|
|
import { Models, Schemas } from "../types/Models";
|
|
|
import getDataPlugin from "../schemas/plugins/getData";
|
|
|
+import Migration from "../Migration";
|
|
|
|
|
|
export default class DataModule extends BaseModule {
|
|
|
private models?: Models;
|
|
@@ -56,6 +59,8 @@ export default class DataModule extends BaseModule {
|
|
|
tags: ["useGetDataPlugin"]
|
|
|
});
|
|
|
|
|
|
+ await this.runMigrations();
|
|
|
+
|
|
|
await this.loadModels();
|
|
|
|
|
|
await this.syncModelIndexes();
|
|
@@ -188,6 +193,32 @@ export default class DataModule extends BaseModule {
|
|
|
|
|
|
return this.models[name];
|
|
|
}
|
|
|
+
|
|
|
+ private async loadMigrations() {
|
|
|
+ if (!this.mongoConnection) throw new Error("Mongo is not available");
|
|
|
+
|
|
|
+ const migrations = await readdir(
|
|
|
+ path.resolve(__dirname, "../schemas/migrations/")
|
|
|
+ );
|
|
|
+
|
|
|
+ return Promise.all(
|
|
|
+ migrations.map(async migrationFile => {
|
|
|
+ const { default: Migrate }: { default: typeof Migration } =
|
|
|
+ await import(`../schemas/migrations/${migrationFile}`);
|
|
|
+ return new Migrate(this.mongoConnection as Connection);
|
|
|
+ })
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ private async runMigrations() {
|
|
|
+ const migrations = await this.loadMigrations();
|
|
|
+
|
|
|
+ for (let i = 0; i < migrations.length; i += 1) {
|
|
|
+ const migration = migrations[i];
|
|
|
+ // eslint-disable-next-line no-await-in-loop
|
|
|
+ await migration.up();
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
export type DataModuleJobs = {
|