From 8075c83fe28fbaa36b591d2d7d3ae38811e89b54 Mon Sep 17 00:00:00 2001 From: Ben Date: Fri, 1 Dec 2023 22:08:08 -0500 Subject: [PATCH] batch insert --- src/ORM/client/client.service.ts | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/src/ORM/client/client.service.ts b/src/ORM/client/client.service.ts index 0399dd1..8798879 100644 --- a/src/ORM/client/client.service.ts +++ b/src/ORM/client/client.service.ts @@ -1,6 +1,8 @@ import { Injectable } from '@nestjs/common'; +import { Interval } from '@nestjs/schedule'; import { InjectRepository } from '@nestjs/typeorm'; -import { Repository } from 'typeorm'; +import { BehaviorSubject, firstValueFrom } from 'rxjs'; +import { ObjectLiteral, Repository } from 'typeorm'; import { ClientEntity } from './client.entity'; @@ -10,6 +12,8 @@ import { ClientEntity } from './client.entity'; export class ClientService { + public insertQueue: { result: BehaviorSubject, partialClient: Partial }[] = []; + constructor( @InjectRepository(ClientEntity) @@ -18,6 +22,17 @@ export class ClientService { } + @Interval(1000 * 5) + public async insertClients() { + const queueCopy = [...this.insertQueue]; + this.insertQueue = []; + + const results = await this.clientRepository.insert(queueCopy.map(c => c.partialClient)); + + queueCopy.forEach((c, index) => { + c.result.next(results.generatedMaps[index]); + }); + } public async killDeadClients() { var fiveMinutes = new Date(new Date().getTime() - (5 * 60 * 1000)).toISOString(); @@ -40,11 +55,19 @@ export class ClientService { public async insert(partialClient: Partial): Promise { - const insertResult = await this.clientRepository.insert(partialClient); + + const result = new BehaviorSubject(null); + + this.insertQueue.push({ result, partialClient }); + + + // const insertResult = await this.clientRepository.insert(partialClient); + + const generatedMap = await firstValueFrom(result); const client = { ...partialClient, - ...insertResult.generatedMaps[0] + ...generatedMap }; return client as ClientEntity;