import { Injectable } from '@nestjs/common'; import { CacheService } from '../../cache/cache.service'; import { TBANK_CACHE_KEYS } from '../tbank.config'; import type { TBankInstrument, TBankInstrumentResponse } from '../types/tbank-proto.types'; import { TBankClientService } from './tbank-client.service'; @Injectable() export class BrokerInstrumentsService { constructor( private readonly tbankClient: TBankClientService, private readonly cacheService: CacheService, ) {} async findByInstrumentUid(instrumentUid: string): Promise { const result = await this.cacheService.getOrFetch( TBANK_CACHE_KEYS.instrument, [instrumentUid], () => this.fetchByUid(instrumentUid), 'tbankInstrumentTtl', ); return result.data; } private async fetchByUid(instrumentUid: string): Promise { const instrumentsClient = this.tbankClient.getServiceClient('InstrumentsService') as any; const response = await this.tbankClient.callUnary< { idType: string; id: string }, TBankInstrumentResponse >( 'InstrumentsService/GetInstrumentBy', instrumentsClient.getInstrumentBy.bind(instrumentsClient), { idType: 'INSTRUMENT_ID_TYPE_UID', id: instrumentUid }, ); return response.instrument ?? null; } }