#745 Aктуализированть функционал по работе с временными рядами под новую сущность #19
No reviewers
Labels
No Label
No Milestone
No project
No Assignees
3 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: on.nemtina/persistence#19
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "TimestampedValuesRepository"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Надо выделять сервис, там дофига логики будет:)
@ -0,0 +13,4 @@
/// <summary>
/// Идентификаторы
/// </summary>
public string[] Identity { get; set; } = [];
Это названия свойств.
Предлагаю сразу хранить их в виде объектов описания.
Сейчас описание состоит из названия свойства, но в будущем оно может вырасти и хранить тип данных и метаданные для схемы protobuf. Или Даже текстовое описание, которое смогут получать наши клиенты из сваггера.
PropNames
@ -0,0 +214,4 @@
private async Task CreateValuesIdentityIfNotExist(Guid discriminatorId, string[] keys, CancellationToken token)
{
var valuesIdentities = await relatedDataRepository.Get(token);
Предлагаю valuesIdentity переименовать в dataScheme.
Переименовано
@ -0,0 +216,4 @@
{
var valuesIdentities = await relatedDataRepository.Get(token);
var valuesIdentity = valuesIdentities?
.FirstOrDefault(e => e.DiscriminatorId == discriminatorId);
Нам нужен метод поиска по репозиторию схем данных внутри этого репозитория. Перебор IEnumerable для каждой добавляемой точки будет довольно дорогой историей
Механизм вычитки изменен
Рецензия 1
@ -0,0 +30,4 @@
/// <param name="dtos"></param>
/// <param name="token"></param>
[HttpPost]
[ProducesResponseType(typeof(int), (int)HttpStatusCode.Created)]
Если у нас возвращаемый статус Created, то тогда нужно возвращать CreatedAtAction
@ -19,3 +19,3 @@
if (response.IsSuccessStatusCode)
{
return response.Content;
return response.Content!;
А может же быть такое, что запрос вернул 200 статус, но контент при этом null...
Сделал Task<T?> - Так будет правильно
@ -0,0 +100,4 @@
/// <param name="take"></param>
/// <param name="token"></param>
/// <returns></returns>
Task<IEnumerable<T>> GetLast<T>(Guid idDiscriminator, int take, CancellationToken token);
2 метода GetLast: один просто, другой Generic - так должно и быть?
А еще нужно убрать columnNames из комментария
Да, это наработки Саши. generic методы позволяют при использовании наших клиентов мапить результат на указанную дто-шку
@ -0,0 +22,4 @@
/// <inheritdoc/>
public async Task<int> AddRange(Guid discriminatorId, IEnumerable<TimestampedValuesDto> dtos, CancellationToken token)
{
foreach (var dto in dtos)
здесь пока указать to do для будущего рефакторинга, потому как в цикле обращаться к базе, несмотря на наличие кеша как-то не очень.
Никита сказал, что это дело не первой важности, поэтому пока todo
Рецензия - 2
@ -0,0 +103,4 @@
var dateEnd = dateBegin.AddSeconds(intervalSec);
result = result
.Where(i => i.Item1 <= dateEnd);
Вот тут немного не понятно: данные фильтруются по dateBegin и dateEnd.
Но фильтрация по dateBegin предполагает строгое неравенство (метод GetGtDate), а фильтрация по dateEnd - нестрогое (i => i.Item1 <= dateEnd).
Может, так и должно быть...
Логику я не менял. Вероятно, так должно быть
@ -0,0 +131,4 @@
Timestamp = entity.Item1.ToUniversalTime()
};
var identity = systemSpecification!.PropNames;
Эту строчку можно вынести за пределы массива
Также, чтобы из избавиться от лишнего цикла по identity внутри цикла по dtos, то можно за пределы внешнего цикла вынести вот это:
var identityValues = identity.Select((value, index) => new { index, value });
А внутри цикла инициализировать dto.Values так:
dto.Values = identityValues.ToDictionary(x => x.value, x => entity.Item2[x.index]);
Ну это, как вариант (можно спросит у Никиты)