Browse Source

feat: Include socketId in job options and context

Owen Diffey 1 year ago
parent
commit
7281cd11ae

+ 9 - 3
backend/src/Job.ts

@@ -81,22 +81,28 @@ export default class Job {
 
 		this.payload = payload;
 
-		this.context = new JobContext(this, options?.session);
-
 		this.logBook = LogBook.getPrimaryInstance();
 
 		this.jobStatistics = JobStatistics.getPrimaryInstance();
 		this.jobStatistics.updateStats(this.getName(), "added");
 
+		let contextOptions;
+
 		if (options) {
-			const { priority, longJob } = options;
+			const { priority, longJob, session, socketId } = options;
+
+			if (session || socketId) contextOptions = { session, socketId };
+
 			if (priority) this.priority = priority;
+
 			if (longJob)
 				this.longJob = {
 					title: longJob
 				};
 		}
 
+		this.context = new JobContext(this, contextOptions);
+
 		/* eslint-disable no-bitwise, eqeqeq */
 		this.uuid = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(
 			/[xy]/g,

+ 13 - 2
backend/src/JobContext.ts

@@ -16,14 +16,20 @@ export default class JobContext {
 
 	private session?: SessionSchema;
 
+	private readonly socketId?: string;
+
 	private user?: UserSchema;
 
 	private permissions?: Record<string, boolean>;
 
-	public constructor(job: Job, session?: SessionSchema) {
+	public constructor(
+		job: Job,
+		options?: { session?: SessionSchema; socketId?: string }
+	) {
 		this.job = job;
 		this.jobQueue = JobQueue.getPrimaryInstance();
-		this.session = session;
+		this.session = options?.session;
+		this.socketId = options?.socketId;
 	}
 
 	/**
@@ -43,6 +49,10 @@ export default class JobContext {
 		this.session = session;
 	}
 
+	public getSocketId() {
+		return this.socketId;
+	}
+
 	/**
 	 * executeJob - Execute a job
 	 *
@@ -70,6 +80,7 @@ export default class JobContext {
 	): Promise<ReturnType> {
 		return new Job(jobName.toString(), moduleName, payload, {
 			session: this.session,
+			socketId: this.socketId,
 			...(options ?? {})
 		}).execute();
 	}

+ 7 - 2
backend/src/modules/APIModule.ts

@@ -58,12 +58,14 @@ export default class APIModule extends BaseModule {
 			moduleName,
 			jobName,
 			payload,
-			sessionId
+			sessionId,
+			socketId
 		}: {
 			moduleName: ModuleNameType;
 			jobName: JobNameType;
 			payload: PayloadType;
 			sessionId?: string;
+			socketId?: string;
 		}
 	): Promise<ReturnType> {
 		let session;
@@ -75,7 +77,10 @@ export default class APIModule extends BaseModule {
 			});
 		}
 
-		return context.executeJob(moduleName, jobName, payload, { session });
+		return context.executeJob(moduleName, jobName, payload, {
+			session,
+			socketId
+		});
 	}
 
 	/**

+ 2 - 1
backend/src/modules/WebSocketModule.ts

@@ -143,7 +143,8 @@ export default class WebSocketModule extends BaseModule {
 				moduleName,
 				jobName,
 				payload,
-				sessionId: socket.getSessionId()
+				sessionId: socket.getSessionId(),
+				socketId: socket.getSocketId()
 			});
 
 			socket.dispatch("CB_REF", CB_REF, res);

+ 1 - 0
backend/src/types/JobOptions.ts

@@ -4,4 +4,5 @@ export type JobOptions = {
 	priority?: number;
 	longJob?: string;
 	session?: SessionSchema;
+	socketId?: string;
 };