//using DD.Persistence.Models; //using DD.Persistence.Models.Common; //using DD.Persistence.Repositories; //using Microsoft.EntityFrameworkCore; //namespace DD.Persistence.Repository.Repositories; //public class TimestampedValuesCachedRepository : TimestampedValuesRepository //{ // public static TimestampedValuesDto? FirstByDate { get; private set; } // public static CyclicArray LastData { get; } = new CyclicArray(CacheItemsCount); // private const int CacheItemsCount = 3600; // public TimestampedValuesCachedRepository(DbContext db, IDataSourceSystemRepository relatedDataRepository) : base(db, relatedDataRepository) // { // //Task.Run(async () => // //{ // // var firstDateItem = await base.GetFirst(CancellationToken.None); // // if (firstDateItem == null) // // { // // return; // // } // // FirstByDate = firstDateItem; // // var dtos = await base.GetLast(CacheItemsCount, CancellationToken.None); // // dtos = dtos.OrderBy(d => d.Timestamp); // // LastData.AddRange(dtos); // //}).Wait(); // } // public override async Task> GetGtDate(Guid discriminatorId, DateTimeOffset dateBegin, CancellationToken token) // { // if (LastData.Count == 0 || LastData[0].Timestamp > dateBegin) // { // var dtos = await base.GetGtDate(discriminatorId, dateBegin, token); // return dtos; // } // var items = LastData // .Where(i => i.Timestamp >= dateBegin); // return items; // } // public override async Task AddRange(Guid discriminatorId, IEnumerable dtos, CancellationToken token) // { // var result = await base.AddRange(discriminatorId, dtos, token); // if (result > 0) // { // dtos = dtos.OrderBy(x => x.Timestamp); // FirstByDate = dtos.First(); // LastData.AddRange(dtos); // } // return result; // } // public override async Task GetDatesRange(Guid discriminatorId, CancellationToken token) // { // if (FirstByDate == null) // return null; // return await Task.Run(() => // { // return new DatesRangeDto // { // From = FirstByDate.Timestamp, // To = LastData[^1].Timestamp // }; // }); // } // public override async Task> GetResampledData( // Guid discriminatorId, // DateTimeOffset dateBegin, // double intervalSec = 600d, // int approxPointsCount = 1024, // CancellationToken token = default) // { // var dtos = LastData.Where(i => i.Timestamp >= dateBegin); // if (LastData.Count == 0 || LastData[0].Timestamp > dateBegin) // { // dtos = await base.GetGtDate(discriminatorId, dateBegin, token); // } // var dateEnd = dateBegin.AddSeconds(intervalSec); // dtos = dtos // .Where(i => i.Timestamp <= dateEnd); // var ratio = dtos.Count() / approxPointsCount; // if (ratio > 1) // dtos = dtos // .Where((_, index) => index % ratio == 0); // return dtos; // } //}