import { Injectable } from '@nestjs/common'; import { MoexClientService } from '../moex-client/moex-client.service'; import { CacheService } from '../cache/cache.service'; import { CandleInterval } from './dto/candles-query.dto'; @Injectable() export class CandlesService { constructor( private readonly moexClient: MoexClientService, private readonly cache: CacheService, ) {} private mapInterval(interval: CandleInterval): 60 | 24 { return interval === CandleInterval.HOUR ? 60 : 24; } async getCandles( market: 'shares' | 'bonds', secid: string, interval: CandleInterval, from: string, till: string, ) { const moexInterval = this.mapInterval(interval); const { data, fromCache, cachedAt } = await this.cache.getOrFetch( 'candles', [market, secid, String(moexInterval), from, till], () => this.moexClient.getCandles('stock', market, secid, moexInterval, from, till), 'candlesTtl', ); return { data: data.map((c) => ({ open: c.open, high: c.high, low: c.low, close: c.close, volume: c.volume, value: c.value, begin: c.begin, end: c.end, })), meta: { fromCache, cachedAt }, }; } }