39 lines
1.3 KiB
TypeScript
39 lines
1.3 KiB
TypeScript
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<TBankInstrument | null> {
|
|
const result = await this.cacheService.getOrFetch(
|
|
TBANK_CACHE_KEYS.instrument,
|
|
[instrumentUid],
|
|
() => this.fetchByUid(instrumentUid),
|
|
'tbankInstrumentTtl',
|
|
);
|
|
|
|
return result.data;
|
|
}
|
|
|
|
private async fetchByUid(instrumentUid: string): Promise<TBankInstrument | null> {
|
|
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;
|
|
}
|
|
}
|