feat: integrate BullMQ for query processing and add QueueModule

This commit is contained in:
Boris D
2025-10-06 16:32:28 +03:00
parent 39c40013b2
commit 67099969db
9 changed files with 208 additions and 14 deletions

View File

@ -10,14 +10,22 @@ import {
registeredPlugins,
} from "src/vm/vm.constants";
import { DatabaseManagerService } from "src/databaseManager/database/database.manager.service";
import { InjectQueue } from "@nestjs/bullmq";
import { QUEUE_NAMES } from "src/queue/constants";
import { Queue, QueueEvents } from "bullmq";
@Injectable()
export class QueryExecuterService {
private queueEvents: QueueEvents;
constructor(
@InjectRepository(Query)
readonly queryRepository: Repository<Query>,
readonly databaseManagerService: DatabaseManagerService
) {}
readonly databaseManagerService: DatabaseManagerService,
@InjectQueue(QUEUE_NAMES.QUERY) private queryQueue: Queue
) {
this.queueEvents = new QueueEvents(this.queryQueue.name);
}
parseImports(source: string): string[] {
const importRegex =
@ -38,6 +46,21 @@ export class QueryExecuterService {
.trim();
}
async runQueryQueued(
token: string,
queryData: any,
headers: Record<string, any> = {}
): Promise<QueryResponse> {
const job = await this.queryQueue.add(`${new Date().getTime()}_${token}`, {
token,
queryData,
headers,
});
const result = await job.waitUntilFinished(this.queueEvents);
return result;
}
async runQuery(
token: string,
queryData: any,
@ -120,4 +143,8 @@ export class QueryExecuterService {
)
);
}
async onModuleDestroy() {
await this.queueEvents.close();
}
}