From c5da82c2105f4372739a3dd3e8b689eaef5c09ac Mon Sep 17 00:00:00 2001 From: Roman Efremov Date: Thu, 6 Feb 2025 12:39:40 +0500 Subject: [PATCH] =?UTF-8?q?=D0=9F=D1=80=D0=B0=D0=B2=D0=BA=D0=B8=20=D0=BF?= =?UTF-8?q?=D0=BE=20=D1=80=D0=B5=D0=B2=D1=8C=D1=8E=20#4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DD.Persistence.Models/DataSchemeDto.cs | 6 +++--- .../TimestampedValuesServiceShould.cs | 16 ++++++++++++---- .../Services/TimestampedValuesService.cs | 17 +++++++++-------- 3 files changed, 24 insertions(+), 15 deletions(-) diff --git a/DD.Persistence.Models/DataSchemeDto.cs b/DD.Persistence.Models/DataSchemeDto.cs index d20ffaa..2b28176 100644 --- a/DD.Persistence.Models/DataSchemeDto.cs +++ b/DD.Persistence.Models/DataSchemeDto.cs @@ -18,7 +18,7 @@ public class DataSchemeDto : IEnumerable, IEquatable Properties { get; } = []; /// - public DataSchemeDto(Guid discriminatorId, SchemePropertyDto[] Properties) + public DataSchemeDto(Guid discriminatorId, IEnumerable Properties) { DiscriminatorId = discriminatorId; this.Properties = Properties; @@ -34,8 +34,8 @@ public class DataSchemeDto : IEnumerable, IEquatable public bool Equals(IEnumerable? otherProperties) { - //if (otherProperties is null) - // return false; + if (otherProperties is null) + return false; return Properties.SequenceEqual(otherProperties); } diff --git a/DD.Persistence.Test/TimestampedValuesServiceShould.cs b/DD.Persistence.Test/TimestampedValuesServiceShould.cs index ad26d14..0fe7769 100644 --- a/DD.Persistence.Test/TimestampedValuesServiceShould.cs +++ b/DD.Persistence.Test/TimestampedValuesServiceShould.cs @@ -2,6 +2,7 @@ using DD.Persistence.Repositories; using DD.Persistence.Services; using NSubstitute; +using System.Text.Json; namespace DD.Persistence.Repository.Test; public class TimestampedValuesServiceShould @@ -45,10 +46,10 @@ public class TimestampedValuesServiceShould { var values = new Dictionary() { - { "A", i }, - { "B", i * 1.1 }, - { "C", $"Any{i}" }, - { "D", DateTimeOffset.Now }, + { "A", GetJsonFromObject(i) }, + { "B", GetJsonFromObject(i * 1.1) }, + { "C", GetJsonFromObject($"Any{i}") }, + { "D", GetJsonFromObject(DateTimeOffset.Now) } }; yield return new TimestampedValuesDto() @@ -58,4 +59,11 @@ public class TimestampedValuesServiceShould }; } } + + private static JsonElement GetJsonFromObject(object value) + { + var jsonString = JsonSerializer.Serialize(value); + var doc = JsonDocument.Parse(jsonString); + return doc.RootElement; + } } diff --git a/DD.Persistence/Services/TimestampedValuesService.cs b/DD.Persistence/Services/TimestampedValuesService.cs index 5e6f9ed..cef700f 100644 --- a/DD.Persistence/Services/TimestampedValuesService.cs +++ b/DD.Persistence/Services/TimestampedValuesService.cs @@ -117,13 +117,13 @@ public class TimestampedValuesService : ITimestampedValuesService if (dataScheme is null) continue; - foreach (var tuple in keyValuePair.Value) + foreach (var (Timestamp, Values) in keyValuePair.Value) { var dto = new TimestampedValuesDto() { - Timestamp = tuple.Timestamp.ToUniversalTime(), + Timestamp = Timestamp.ToUniversalTime(), Values = dataScheme - .ToDictionary(k => k.PropertyName, v => tuple.Values[v.Index]) + .ToDictionary(k => k.PropertyName, v => Values[v.Index]) }; result = result.Append(dto); @@ -144,11 +144,12 @@ public class TimestampedValuesService : ITimestampedValuesService private async Task CreateDataSchemeIfNotExist(Guid discriminatorId, TimestampedValuesDto dto, CancellationToken token) { var valuesList = dto.Values.ToList(); - var properties = valuesList.ToList().Select(e => new SchemePropertyDto() { - Index = valuesList.IndexOf(e), + var properties = valuesList.Select((e, index) => new SchemePropertyDto() + { + Index = index, PropertyName = e.Key, - PropertyKind = ((JsonElement) e.Value).ValueKind - }).ToArray(); + PropertyKind = ((JsonElement)e.Value).ValueKind + }); var dataScheme = await dataSchemeRepository.Get(discriminatorId, token); if (dataScheme is null) @@ -172,7 +173,7 @@ public class TimestampedValuesService : ITimestampedValuesService /// /// Поля, которые необходимо оставить /// - private IEnumerable ReduceSetColumnsByNames(IEnumerable dtos, IEnumerable fieldNames) + private static IEnumerable ReduceSetColumnsByNames(IEnumerable dtos, IEnumerable fieldNames) { var result = dtos.Select(dto => {