From 4ae4780cdb01bb228facd2dced9f9fb0d801f8cd Mon Sep 17 00:00:00 2001 From: anjdydhody Date: Tue, 12 Nov 2024 21:17:00 +0900 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat:=20=EC=B2=B4=EA=B2=B0=EA=B0=80?= =?UTF-8?q?=20=EC=9B=B9=EC=86=8C=EC=BC=93=EA=B3=BC=20=EC=A3=BC=EB=AC=B8=20?= =?UTF-8?q?=EC=B2=B4=EA=B2=B0=20=EC=97=B0=EB=8F=99=20#53?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../stock/price/stock-price-socket.service.ts | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 BE/src/websocket/stock/price/stock-price-socket.service.ts diff --git a/BE/src/websocket/stock/price/stock-price-socket.service.ts b/BE/src/websocket/stock/price/stock-price-socket.service.ts new file mode 100644 index 00000000..feefe457 --- /dev/null +++ b/BE/src/websocket/stock/price/stock-price-socket.service.ts @@ -0,0 +1,38 @@ +import { Injectable, InternalServerErrorException } from '@nestjs/common'; +import { BaseSocketService } from '../../base-socket.service'; +import { SocketGateway } from '../../socket.gateway'; +import { StockItemService } from '../../../stock/item/stock-item.service'; +import { StockOrderService } from '../../../stock/order/stock-order.service'; + +@Injectable() +export class StockPriceSocketService { + private TR_ID = 'H0STCNT0'; + + constructor( + private readonly socketGateway: SocketGateway, + private readonly baseSocketService: BaseSocketService, + private readonly stockItemService: StockItemService, + private readonly stockOrderService: StockOrderService, + ) { + baseSocketService.registerSocketOpenHandler(async () => { + const stockList = await this.stockItemService.getAllStockItems(); + stockList.forEach((stock) => { + this.baseSocketService.registerCode(this.TR_ID, stock.code); + }); + }); + + baseSocketService.registerSocketDataHandler( + this.TR_ID, + (data: string[]) => { + stockOrderService + .checkExecutableOrder( + data[0], // 주식 코드 + data[2], // 주식 체결가 + ) + .catch(() => { + throw new InternalServerErrorException(); + }); + }, + ); + } +}