persistence/DD.Persistence.Repository/RepositoriesCached/TimestampedValuesCachedRepository.cs

105 lines
3.2 KiB
C#
Raw Normal View History

2025-01-13 17:45:49 +05:00
//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<TEntity, TDto> : TimeSeriesDataRepository<TEntity, TDto>
// where TEntity : class, ITimestampedItem, new()
// where TDto : class, ITimestampAbstractDto, new()
//{
// public static TDto? FirstByDate { get; private set; }
// public static CyclicArray<TDto> LastData { get; } = new CyclicArray<TDto>(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<IEnumerable<TDto>> 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<int> AddRange(IEnumerable<TDto> 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<DatesRangeDto?> 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<IEnumerable<TDto>> 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;
// }
//}