ソースを参照

refactor: changed JobContext to be param instead of this, force use an empty object if no payload is expected

Kristian Vos 1 年間 前
コミット
09d2a5b8f4

+ 2 - 0
.gitignore

@@ -37,3 +37,5 @@ package-lock.json
 
 # Logs
 log/
+
+.vscode/tasks.json

+ 2 - 2
backend/src/JobContext.ts

@@ -60,9 +60,9 @@ export default class JobContext {
 			keyof Omit<Modules[ModuleNameType], keyof BaseModule>,
 		PayloadType extends "payload" extends keyof Jobs[ModuleNameType][JobNameType]
 			? Jobs[ModuleNameType][JobNameType]["payload"] extends undefined
-				? void
+				? Record<string, never>
 				: Jobs[ModuleNameType][JobNameType]["payload"]
-			: void,
+			: Record<string, never>,
 		ReturnType = "returns" extends keyof Jobs[ModuleNameType][JobNameType]
 			? Jobs[ModuleNameType][JobNameType]["returns"]
 			: never

+ 3 - 4
backend/src/ModuleManager.ts

@@ -163,9 +163,9 @@ export default class ModuleManager {
 			keyof Omit<Modules[ModuleNameType], keyof BaseModule>,
 		PayloadType extends "payload" extends keyof Jobs[ModuleNameType][JobNameType]
 			? Jobs[ModuleNameType][JobNameType]["payload"] extends undefined
-				? void
+				? Record<string, never>
 				: Jobs[ModuleNameType][JobNameType]["payload"]
-			: void,
+			: Record<string, never>,
 		ReturnType = "returns" extends keyof Jobs[ModuleNameType][JobNameType]
 			? Jobs[ModuleNameType][JobNameType]["returns"]
 			: never
@@ -196,8 +196,7 @@ export default class ModuleManager {
 								this.logBook,
 								job
 							);
-							jobFunction
-								.apply(jobContext, [payload])
+							jobFunction(jobContext, payload)
 								.then((response: ReturnType) => {
 									this.logBook.log({
 										message: "Job completed successfully",

+ 3 - 0
backend/src/main.ts

@@ -32,6 +32,9 @@ setTimeout(() => {
 	clearTimeout(interval);
 }, 3000);
 
+// Temp fix
+process.removeAllListeners("uncaughtException");
+
 process.on("uncaughtException", err => {
 	if (err.name === "ECONNREFUSED" || err.name === "UNCERTAIN_STATE") return;
 

+ 20 - 16
backend/src/modules/DataModule.ts

@@ -7,6 +7,7 @@ import BaseModule from "../BaseModule";
 import ModuleManager from "../ModuleManager";
 import { UniqueMethods } from "../types/Modules";
 import { Collections } from "../types/Collections";
+import JobContext from "src/JobContext";
 
 export default class DataModule extends BaseModule {
 	collections?: Collections;
@@ -288,21 +289,24 @@ export default class DataModule extends BaseModule {
 	 * @param payload - Payload
 	 * @returns Returned object
 	 */
-	public find<T extends keyof Collections>({
-		collection,
-		query,
-		values, // TODO: Add support
-		limit = 1, // TODO have limit off by default?
-		page = 1,
-		useCache = true
-	}: {
-		collection: T;
-		query: Record<string, any>;
-		values?: Record<string, any>;
-		limit?: number;
-		page?: number;
-		useCache?: boolean;
-	}): Promise<any | null> {
+	public find<T extends keyof Collections>(
+		context: JobContext,
+		{
+			collection,
+			query,
+			values, // TODO: Add support
+			limit = 1, // TODO have limit off by default?
+			page = 1,
+			useCache = true
+		}: {
+			collection: T;
+			query: Record<string, any>;
+			values?: Record<string, any>;
+			limit?: number;
+			page?: number;
+			useCache?: boolean;
+		}
+	): Promise<any | null> {
 		return new Promise((resolve, reject) => {
 			let queryHash: string | null = null;
 			let cacheable = useCache !== false;
@@ -420,7 +424,7 @@ export default class DataModule extends BaseModule {
 
 export type DataModuleJobs = {
 	[Property in keyof UniqueMethods<DataModule>]: {
-		payload: Parameters<UniqueMethods<DataModule>[Property]>[0];
+		payload: Parameters<UniqueMethods<DataModule>[Property]>[1];
 		returns: Awaited<ReturnType<UniqueMethods<DataModule>[Property]>>;
 	};
 };

+ 6 - 2
backend/src/modules/OtherModule.ts

@@ -1,3 +1,4 @@
+import JobContext from "src/JobContext";
 import { UniqueMethods } from "../types/Modules";
 import BaseModule from "../BaseModule";
 import ModuleManager from "../ModuleManager";
@@ -33,7 +34,10 @@ export default class OtherModule extends BaseModule {
 	 * @param payload - Payload
 	 * @returns Returned object
 	 */
-	public doThing(payload: { test: string; test2: number }): Promise<{
+	public doThing(
+		context: JobContext,
+		payload: { test: string; test2: number }
+	): Promise<{
 		res: number;
 	}> {
 		return new Promise((resolve, reject) => {
@@ -52,7 +56,7 @@ export default class OtherModule extends BaseModule {
 
 export type OtherModuleJobs = {
 	[Property in keyof UniqueMethods<OtherModule>]: {
-		payload: Parameters<UniqueMethods<OtherModule>[Property]>[0];
+		payload: Parameters<UniqueMethods<OtherModule>[Property]>[1];
 		returns: Awaited<ReturnType<UniqueMethods<OtherModule>[Property]>>;
 	};
 };

+ 15 - 14
backend/src/modules/StationModule.ts

@@ -34,7 +34,10 @@ export default class StationModule extends BaseModule {
 	 *
 	 * @param payload - Payload
 	 */
-	public addToQueue(payload: { songId: string }): Promise<void> {
+	public addToQueue(
+		context: JobContext,
+		payload: { songId: string }
+	): Promise<void> {
 		return new Promise((resolve, reject) => {
 			const { songId } = payload;
 			// console.log(`Adding song ${songId} to the queue.`);
@@ -45,29 +48,27 @@ export default class StationModule extends BaseModule {
 		});
 	}
 
-	public addA(this: JobContext): Promise<{ number: number }> {
+	public addA(context: JobContext): Promise<{ number: number }> {
 		return new Promise<{ number: number }>(resolve => {
-			this.log("ADDA");
-			this.runJob("stations", "addB", void 0, { priority: 5 }).then(
-				() => {
-					resolve({ number: 123 });
-				}
-			);
+			context.log("ADDA");
+			context.runJob("stations", "addB", {}, { priority: 5 }).then(() => {
+				resolve({ number: 123 });
+			});
 		});
 	}
 
-	public addB(this: JobContext): Promise<void> {
+	public addB(context: JobContext): Promise<void> {
 		return new Promise<void>(resolve => {
-			this.log("ADDB");
-			this.runJob("stations", "addC", void 0).then(() => {
+			context.log("ADDB");
+			context.runJob("stations", "addC", {}).then(() => {
 				resolve();
 			});
 		});
 	}
 
-	public addC(this: JobContext): Promise<void> {
+	public addC(context: JobContext): Promise<void> {
 		return new Promise<void>(resolve => {
-			this.log("ADDC");
+			context.log("ADDC");
 			resolve();
 		});
 	}
@@ -75,7 +76,7 @@ export default class StationModule extends BaseModule {
 
 export type StationModuleJobs = {
 	[Property in keyof UniqueMethods<StationModule>]: {
-		payload: Parameters<UniqueMethods<StationModule>[Property]>[0];
+		payload: Parameters<UniqueMethods<StationModule>[Property]>[1];
 		returns: Awaited<ReturnType<UniqueMethods<StationModule>[Property]>>;
 	};
 };