//using Microsoft.EntityFrameworkCore; //using DD.Persistence.Models.Common; //using DD.Persistence.ModelsAbstractions; //using DD.Persistence.Database.EntityAbstractions; //namespace DD.Persistence.Repository.Repositories; //public class TimestampedValuesCachedRepository : TimeSeriesDataRepository // where TEntity : class, ITimestampedItem, new() // where TDto : class, ITimestampAbstractDto, new() //{ // public static TDto? FirstByDate { get; private set; } // public static CyclicArray LastData { get; } = new CyclicArray(CacheItemsCount); // private const int CacheItemsCount = 3600; // public TimestampedValuesCachedRepository(DbContext db) : base(db) // { // Task.Run(async () => // { // var firstDateItem = await base.GetFirstAsync(CancellationToken.None); // if (firstDateItem == null) // { // return; // } // FirstByDate = firstDateItem; // var dtos = await base.GetLastAsync(CacheItemsCount, CancellationToken.None); // dtos = dtos.OrderBy(d => d.Timestamp); // LastData.AddRange(dtos); // }).Wait(); // } // public override async Task> GetGtDate(DateTimeOffset dateBegin, CancellationToken token) // { // if (LastData.Count == 0 || LastData[0].Timestamp > dateBegin) // { // var dtos = await base.GetGtDate(dateBegin, token); // return dtos; // } // var items = LastData // .Where(i => i.Timestamp >= dateBegin); // return items; // } // public override async Task AddRange(IEnumerable dtos, CancellationToken token) // { // var result = await base.AddRange(dtos, token); // if (result > 0) // { // dtos = dtos.OrderBy(x => x.Timestamp); // FirstByDate = dtos.First(); // LastData.AddRange(dtos); // } // return result; // } // public override async Task GetDatesRange(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( // 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(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; // } //}