using KLHZ.Trader.Core.Contracts.Messaging.Dtos; using KLHZ.Trader.Core.Contracts.Messaging.Interfaces; using KLHZ.Trader.Core.DataLayer; using KLHZ.Trader.Core.DataLayer.Entities.Prices; 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.AddDays(-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) { } } } }