using KLHZ.Trader.Core.Contracts.Messaging.Dtos; using KLHZ.Trader.Core.Contracts.Messaging.Interfaces; using KLHZ.Trader.Core.DataLayer; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; namespace KLHZ.Trader.Service.Controllers { [ApiController] [Route("[controller]/[action]")] public class PlayController : ControllerBase { private readonly IDataBus _dataBus; private readonly IDbContextFactory _dbContextFactory; public PlayController(IDataBus dataBus, IDbContextFactory dbContextFactory) { _dbContextFactory = dbContextFactory; _dataBus = dataBus; } [HttpGet] public async Task Run(string figi) { try { using var context1 = await _dbContextFactory.CreateDbContextAsync(); context1.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking; var data = await context1.PriceChanges .Where(c => c.Figi == figi) .OrderBy(c => c.Time) .Select(c => new NewPriceMessage() { Figi = figi, Ticker = c.Ticker, Time = c.Time, Value = c.Value, IsHistoricalData = true }) .ToArrayAsync(); foreach (var mess in data) { await _dataBus.BroadcastNewPrice(mess); } } catch (Exception ex) { } } } }