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 { var time = DateTime.UtcNow.AddMinutes(-40); using var context1 = await _dbContextFactory.CreateDbContextAsync(); context1.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking; var data = await context1.PriceChanges .Where(c => c.Figi == figi && c.Time >= time) .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.Broadcast(mess); } } catch (Exception ex) { } } ////[HttpGet] //public async Task LoadTradesToHistory(string figi) //{ // try // { // using var context1 = await _dbContextFactory.CreateDbContextAsync(); // context1.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking; // var data = await context1.InstrumentTrades // .Where(c => c.Figi == figi) // .OrderBy(c => c.BoughtAt) // .Select(c => new PriceChange() // { // Figi = figi, // Ticker = c.Ticker, // Time = c.BoughtAt, // Value = c.Price, // IsHistoricalData = true // }) // .ToArrayAsync(); // await context1.PriceChanges.Where(p => p.Figi == figi).ExecuteDeleteAsync(); // await context1.PriceChanges.AddRangeAsync(data); // await context1.SaveChangesAsync(); // } // catch (Exception ex) // { // } //} ////[HttpGet] //public async Task LoadTradesToHistory(string figi) //{ // try // { // using var context1 = await _dbContextFactory.CreateDbContextAsync(); // context1.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking; // var data = await context1.InstrumentTrades // .Where(c => c.Figi == figi) // .OrderBy(c => c.BoughtAt) // .Select(c => new PriceChange() // { // Figi = figi, // Ticker = c.Ticker, // Time = c.BoughtAt, // Value = c.Price, // IsHistoricalData = true // }) // .ToArrayAsync(); // await context1.PriceChanges.Where(p => p.Figi == figi).ExecuteDeleteAsync(); // await context1.PriceChanges.AddRangeAsync(data); // await context1.SaveChangesAsync(); // } // catch (Exception ex) // { // } //} } }