90 lines
2.3 KiB
C#
90 lines
2.3 KiB
C#
using Persistence.Models;
|
|
using Persistence.Repositories;
|
|
using Persistence.Services.Interfaces;
|
|
|
|
namespace Persistence.Services;
|
|
public class WitsDataService : IWitsDataService
|
|
{
|
|
private readonly IParameterRepository witsDataRepository;
|
|
private const int multiplier = 1000;
|
|
public WitsDataService(IParameterRepository witsDataRepository)
|
|
{
|
|
this.witsDataRepository = witsDataRepository;
|
|
}
|
|
|
|
public Task<DatesRangeDto> GetDatesRangeAsync(int idDiscriminator, CancellationToken token)
|
|
{
|
|
var result = witsDataRepository.GetDatesRangeAsync(idDiscriminator, token);
|
|
|
|
return result;
|
|
}
|
|
|
|
public async Task<IEnumerable<WitsDataDto>> GetPart(int idDiscriminator, DateTimeOffset dateBegin, int take, CancellationToken token)
|
|
{
|
|
var dtos = await witsDataRepository.GetPart(idDiscriminator, dateBegin, take, token);
|
|
|
|
var result = new List<WitsDataDto>();
|
|
foreach (var dto in dtos)
|
|
{
|
|
var witsDataDto = result.FirstOrDefault(e => e.DiscriminatorId == dto.DiscriminatorId && e.Timestamped == dto.Timestamp);
|
|
if (witsDataDto == null)
|
|
{
|
|
witsDataDto = new WitsDataDto()
|
|
{
|
|
DiscriminatorId = dto.DiscriminatorId,
|
|
Timestamped = dto.Timestamp
|
|
};
|
|
result.Add(witsDataDto);
|
|
}
|
|
var witsValueDto = new WitsValueDto()
|
|
{
|
|
RecordId = DecodeRecordId(dto.ParameterId),
|
|
ItemId = DecodeItemId(dto.ParameterId),
|
|
Value = dto.Value
|
|
};
|
|
witsDataDto.Values.Append(witsValueDto);
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
public Task<WitsDataDto> GetValuesForGraph(DateTimeOffset dateFrom, DateTimeOffset dateTo)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public async Task<int> InsertRange(IEnumerable<WitsDataDto> dtos, CancellationToken token)
|
|
{
|
|
var parameterDtos = dtos.SelectMany(e => e.Values.Select(t => new ParameterDto()
|
|
{
|
|
DiscriminatorId = e.DiscriminatorId,
|
|
ParameterId = EncodeId(t.RecordId, t.ItemId),
|
|
Value = t.Value.ToString()!,
|
|
Timestamp = e.Timestamped
|
|
}));
|
|
var result = await witsDataRepository.InsertRange(parameterDtos, token);
|
|
|
|
return result;
|
|
}
|
|
|
|
private int EncodeId(int recordId, int itemId)
|
|
{
|
|
var resultId = multiplier * recordId + itemId;
|
|
return resultId;
|
|
}
|
|
|
|
private int DecodeRecordId(int id)
|
|
{
|
|
var resultId = id / multiplier;
|
|
|
|
return resultId;
|
|
}
|
|
|
|
private int DecodeItemId(int id)
|
|
{
|
|
var resultId = id % multiplier;
|
|
|
|
return resultId;
|
|
}
|
|
}
|