| 
					
				 | 
			
			
				@@ -1,5 +1,5 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import config from "config"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import mongoose, { Connection, SchemaTypes } from "mongoose"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import mongoose, { Connection, Model, Schema, SchemaTypes } from "mongoose"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import { patchHistoryPlugin, patchEventEmitter } from "ts-patch-mongoose"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import { readdir } from "fs/promises"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import path from "path"; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -8,16 +8,17 @@ import Migration from "@/modules/DataModule/Migration"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import documentVersionPlugin from "@/modules/DataModule/plugins/documentVersion"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import getDataPlugin from "@/modules/DataModule/plugins/getData"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import BaseModule, { ModuleStatus } from "@/BaseModule"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import { UniqueMethods } from "@/types/Modules"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import { Models } from "@/types/Models"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import { Schemas } from "@/types/Schemas"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import EventsModule from "./EventsModule"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import DataModuleJob from "./DataModule/DataModuleJob"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import Job from "@/Job"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 export class DataModule extends BaseModule { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	private _models?: Models; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	private _models?: Record<string, Model<any>>; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	private _mongoConnection?: Connection; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	declare _jobs: Record<string, typeof Job | typeof DataModuleJob>; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	 * Data Module 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	 */ 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -84,10 +85,7 @@ export class DataModule extends BaseModule { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	 * registerEvents - Register events for schema with event module 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	private async _registerEvents< 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		ModelName extends keyof Models, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		SchemaType extends Schemas[keyof ModelName] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	>(modelName: ModelName, schema: SchemaType) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	private async _registerEvents(modelName: string, schema: Schema<any>) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		const { enabled, eventCreated, eventUpdated, eventDeleted } = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			schema.get("patchHistory") ?? {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -128,10 +126,7 @@ export class DataModule extends BaseModule { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	 * registerEvents - Register events for schema with event module 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	private async _registerEventListeners< 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		ModelName extends keyof Models, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		SchemaType extends Schemas[keyof ModelName] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	>(schema: SchemaType) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	private async _registerEventListeners(schema: Schema<any>) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		const eventListeners = schema.get("eventListeners"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if ( 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -153,12 +148,10 @@ export class DataModule extends BaseModule { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	 * @param modelName - Name of the model 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	 * @returns Model 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	private async _loadModel<ModelName extends keyof Models>( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		modelName: ModelName 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	): Promise<Models[ModelName]> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	private async _loadModel(modelName: string): Promise<Model<any>> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if (!this._mongoConnection) throw new Error("Mongo is not available"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		const { schema }: { schema: Schemas[ModelName] } = await import( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		const { schema }: { schema: Schema<any> } = await import( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			`./DataModule/models/${modelName.toString()}/schema` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -274,13 +267,17 @@ export class DataModule extends BaseModule { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	 * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	 * @returns Model 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public async getModel<ModelName extends keyof Models>(name: ModelName) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public async getModel<ModelType extends Model<any>>( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		name: string 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	): Promise<ModelType> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if (!this._models) throw new Error("Models not loaded"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if (this.getStatus() !== ModuleStatus.STARTED) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			throw new Error("Module not started"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return this._models[name]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (!this._models[name]) throw new Error("Model not found"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return this._models[name] as ModelType; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	private async _loadModelMigrations(modelName: string) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -366,11 +363,4 @@ export class DataModule extends BaseModule { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-export type DataModuleJobs = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	[Property in keyof UniqueMethods<DataModule>]: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		payload: Parameters<UniqueMethods<DataModule>[Property]>[1]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		returns: Awaited<ReturnType<UniqueMethods<DataModule>[Property]>>; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 export default new DataModule(); 
			 |