diff --git a/DD.Persistence.API/Controllers/SetpointController.cs b/DD.Persistence.API/Controllers/SetpointController.cs index e3b8b14..0850438 100644 --- a/DD.Persistence.API/Controllers/SetpointController.cs +++ b/DD.Persistence.API/Controllers/SetpointController.cs @@ -3,6 +3,7 @@ using Microsoft.AspNetCore.Mvc; using DD.Persistence.Models; using DD.Persistence.Repositories; using System.Net; +using System.Text.Json; namespace DD.Persistence.API.Controllers; @@ -28,9 +29,9 @@ public class SetpointController : ControllerBase, ISetpointApi /// /// [HttpGet("current")] - public async Task>> GetCurrent([FromQuery] IEnumerable setpointKeys, CancellationToken token) + public async Task>> GetCurrent([FromQuery] IEnumerable setpointKeys, CancellationToken token) { - var result = await setpointRepository.GetCurrent(setpointKeys, token); + var result = await setpointRepository.GetCurrentDictionary(setpointKeys, token); return Ok(result); } @@ -104,7 +105,7 @@ public class SetpointController : ControllerBase, ISetpointApi public async Task Add(Guid setpointKey, object newValue, CancellationToken token) { var userId = User.GetUserId(); - await setpointRepository.Add(setpointKey, newValue, userId, token); + await setpointRepository.Add(setpointKey, (JsonElement)newValue, userId, token); return CreatedAtAction(nameof(Add), true); } diff --git a/DD.Persistence.App/appsettings.Tests.json b/DD.Persistence.App/appsettings.Tests.json index 72c43d3..9934757 100644 --- a/DD.Persistence.App/appsettings.Tests.json +++ b/DD.Persistence.App/appsettings.Tests.json @@ -1,6 +1,6 @@ { "DbConnection": { - "Host": "postgres", + "Host": "localhost", "Port": 5432, "Database": "persistence", "Username": "postgres", diff --git a/DD.Persistence.Client/Clients/Interfaces/ISetpointClient.cs b/DD.Persistence.Client/Clients/Interfaces/ISetpointClient.cs index 86462ea..f197fe8 100644 --- a/DD.Persistence.Client/Clients/Interfaces/ISetpointClient.cs +++ b/DD.Persistence.Client/Clients/Interfaces/ISetpointClient.cs @@ -24,12 +24,21 @@ public interface ISetpointClient : IDisposable /// Task> GetCurrent(IEnumerable setpointKeys, CancellationToken token); - /// - /// Получить диапазон дат, для которых есть данные в репозитории - /// - /// - /// - Task GetDatesRangeAsync(CancellationToken token); + /// + /// Получить актуальные значения уставок + /// + /// + /// + /// s + Task> GetCurrentDictionary(IEnumerable setpointConfigs, CancellationToken token); + + + /// + /// Получить диапазон дат, для которых есть данные в репозитории + /// + /// + /// + Task GetDatesRangeAsync(CancellationToken token); /// /// Получить значения уставок за определенный момент времени diff --git a/DD.Persistence.Client/Clients/Interfaces/Refit/IRefitSetpointClient.cs b/DD.Persistence.Client/Clients/Interfaces/Refit/IRefitSetpointClient.cs index 1acb398..1cd2742 100644 --- a/DD.Persistence.Client/Clients/Interfaces/Refit/IRefitSetpointClient.cs +++ b/DD.Persistence.Client/Clients/Interfaces/Refit/IRefitSetpointClient.cs @@ -1,5 +1,6 @@ using DD.Persistence.Models; using Refit; +using System.Text.Json; namespace DD.Persistence.Client.Clients.Interfaces.Refit; @@ -7,8 +8,11 @@ public interface IRefitSetpointClient : IRefitClient, IDisposable { private const string BaseRoute = "/api/setpoint"; + //[Get($"{BaseRoute}/current")] + //Task>> GetCurrent([Query(CollectionFormat.Multi)] IEnumerable setpointKeys, CancellationToken token); + [Get($"{BaseRoute}/current")] - Task>> GetCurrent([Query(CollectionFormat.Multi)] IEnumerable setpointKeys, CancellationToken token); + Task>> GetCurrent([Query(CollectionFormat.Multi)] IEnumerable setpointKeys, CancellationToken token); [Get($"{BaseRoute}/history")] Task>> GetHistory([Query(CollectionFormat.Multi)] IEnumerable setpointKeys, [Query] DateTimeOffset historyMoment, CancellationToken token); diff --git a/DD.Persistence.Client/Clients/SetpointClient.cs b/DD.Persistence.Client/Clients/SetpointClient.cs index 808f0b9..0e8df6a 100644 --- a/DD.Persistence.Client/Clients/SetpointClient.cs +++ b/DD.Persistence.Client/Clients/SetpointClient.cs @@ -3,31 +3,57 @@ using DD.Persistence.Client.Clients.Base; using DD.Persistence.Client.Clients.Interfaces; using DD.Persistence.Client.Clients.Interfaces.Refit; using DD.Persistence.Models; +using System.Text.Json; +using System.Text.Json.Serialization; +using System.Globalization; namespace DD.Persistence.Client.Clients; public class SetpointClient : BaseClient, ISetpointClient { private readonly IRefitSetpointClient refitSetpointClient; + private readonly ISetpointConfigStorage setpointConfigStorage; - public SetpointClient(IRefitClientFactory refitSetpointClientFactory, ILogger logger) : base(logger) + public SetpointClient( + IRefitClientFactory refitSetpointClientFactory, + ISetpointConfigStorage setpointConfigStorage, + ILogger logger) : base(logger) { this.refitSetpointClient = refitSetpointClientFactory.Create(); - } + this.setpointConfigStorage = setpointConfigStorage; + } public async Task> GetCurrent(IEnumerable setpointKeys, CancellationToken token) { var result = await ExecuteGetResponse( async () => await refitSetpointClient.GetCurrent(setpointKeys, token), token); - return result!; + return result!.Select(x => new SetpointValueDto { + Key = x.Key, + Value = DeserializeValue(x.Key, x.Value) + }); } - public async Task> GetHistory(IEnumerable setpointKeys, DateTimeOffset historyMoment, CancellationToken token) + + + public async Task> GetCurrentDictionary(IEnumerable setpointConfigs, CancellationToken token) + { + var result = await ExecuteGetResponse( + async () => await refitSetpointClient.GetCurrent(setpointConfigs, token), token); + + + return result!.ToDictionary(x => x.Key,x => DeserializeValue(x.Key,x.Value)); + } + + public async Task> GetHistory(IEnumerable setpointKeys, DateTimeOffset historyMoment, CancellationToken token) { var result = await ExecuteGetResponse( async () => await refitSetpointClient.GetHistory(setpointKeys, historyMoment, token), token); + foreach(var dto in result) + dto.Value = DeserializeValue(dto.Key, (JsonElement)dto.Value); + + return result!; } @@ -36,6 +62,9 @@ public class SetpointClient : BaseClient, ISetpointClient var result = await ExecuteGetResponse( async () => await refitSetpointClient.GetLog(setpointKeys, token), token); + foreach(var item in result) + DeserializeList(result[item.Key]); + return result!; } @@ -48,14 +77,18 @@ public class SetpointClient : BaseClient, ISetpointClient } public async Task> GetPart(DateTimeOffset dateBegin, int take, CancellationToken token) - { - var result = await ExecuteGetResponse( - async () => await refitSetpointClient.GetPart(dateBegin, take, token), token); + { + var result = await ExecuteGetResponse( + async () => await refitSetpointClient.GetPart(dateBegin, take, token), token); - return result!; - } + DeserializeList(result); - public async Task Add(Guid setpointKey, object newValue, CancellationToken token) + return result!; + } + + + + public async Task Add(Guid setpointKey, object newValue, CancellationToken token) { await ExecutePostResponse( async () => await refitSetpointClient.Add(setpointKey, newValue, token), token); @@ -67,4 +100,21 @@ public class SetpointClient : BaseClient, ISetpointClient GC.SuppressFinalize(this); } + + + private object DeserializeValue(Guid key, JsonElement value) + { + if (setpointConfigStorage.TryGetType(key, out var type)) + return value.Deserialize(type)!; + + return value; + } + private void DeserializeList(IEnumerable? result) + { + foreach (var log in result) + log.Value = DeserializeValue(log.Key, (JsonElement)log.Value); + + } + + } diff --git a/DD.Persistence.Client/DD.Persistence.Client.csproj b/DD.Persistence.Client/DD.Persistence.Client.csproj index 12bdea4..3491596 100644 --- a/DD.Persistence.Client/DD.Persistence.Client.csproj +++ b/DD.Persistence.Client/DD.Persistence.Client.csproj @@ -11,9 +11,9 @@ DD.Persistence.Client - 1.0.$([System.DateTime]::UtcNow.ToString(yyMM.ddHH)) + 1.4.$([System.DateTime]::UtcNow.ToString(yyMM.ddHH)).1 - 1.0.$([System.DateTime]::UtcNow.ToString(yyMM.ddHH)) + 1.4.$([System.DateTime]::UtcNow.ToString(yyMM.ddHH)).1 DD.Persistence.Client @@ -33,15 +33,15 @@ snupkg - C:\Projects\Nuget\Persistence\Client + C:\Projects\Nuget\Persistence Readme.md - 1.0.$([System.DateTime]::UtcNow.ToString(yyMM.ddHH)) - 1.0.$([System.DateTime]::UtcNow.ToString(yyMM.ddHH)) + 1.4.$([System.DateTime]::UtcNow.ToString(yyMM.ddHH)) + 1.4.$([System.DateTime]::UtcNow.ToString(yyMM.ddHH)) diff --git a/DD.Persistence.Client/DependencyInjection.cs b/DD.Persistence.Client/DependencyInjection.cs index eced892..e5c7c29 100644 --- a/DD.Persistence.Client/DependencyInjection.cs +++ b/DD.Persistence.Client/DependencyInjection.cs @@ -15,7 +15,7 @@ public static class DependencyInjection /// /// /// - public static IServiceCollection AddPersistenceClients(this IServiceCollection services) + public static IServiceCollection AddPersistenceClients(this IServiceCollection services, Dictionary? setpointTypeConfigs = null) { services.AddTransient(typeof(IRefitClientFactory<>), typeof(RefitClientFactory<>)); services.AddTransient(); @@ -25,6 +25,11 @@ public static class DependencyInjection services.AddTransient, TimeSeriesClient>(); services.AddTransient(); services.AddTransient(); + + services.AddSingleton(provider => + { + return new SetpointConfigStorage(setpointTypeConfigs); + }); return services; } } diff --git a/DD.Persistence.Client/ISetpointConfigStorage.cs b/DD.Persistence.Client/ISetpointConfigStorage.cs new file mode 100644 index 0000000..2c73783 --- /dev/null +++ b/DD.Persistence.Client/ISetpointConfigStorage.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DD.Persistence.Client; +public interface ISetpointConfigStorage +{ + bool TryGetType(Guid id, out Type type); +} diff --git a/DD.Persistence.Client/SetpointConfigStorage.cs b/DD.Persistence.Client/SetpointConfigStorage.cs new file mode 100644 index 0000000..5cfbabf --- /dev/null +++ b/DD.Persistence.Client/SetpointConfigStorage.cs @@ -0,0 +1,20 @@ +namespace DD.Persistence.Client; +internal class SetpointConfigStorage : ISetpointConfigStorage +{ + private readonly Dictionary setpointTypeConfigs; + + public SetpointConfigStorage(Dictionary? setpointTypeConfigs) + { + this.setpointTypeConfigs = setpointTypeConfigs?? new Dictionary(); + } + + public bool TryGetType(Guid id, out Type type) + { + return setpointTypeConfigs.TryGetValue(id, out type); + } + + public void AddOrReplace(Guid id, Type type) + { + setpointTypeConfigs[id] = type; + } +} diff --git a/DD.Persistence.Database/Entity/Setpoint.cs b/DD.Persistence.Database/Entity/Setpoint.cs index 94eca3f..75bca4f 100644 --- a/DD.Persistence.Database/Entity/Setpoint.cs +++ b/DD.Persistence.Database/Entity/Setpoint.cs @@ -1,5 +1,6 @@ using Microsoft.EntityFrameworkCore; using System.ComponentModel.DataAnnotations.Schema; +using System.Text.Json; namespace DD.Persistence.Database.Model { @@ -10,7 +11,7 @@ namespace DD.Persistence.Database.Model public Guid Key { get; set; } [Column(TypeName = "jsonb"), Comment("Значение уставки")] - public required object Value { get; set; } + public required JsonElement Value { get; set; } [Comment("Дата создания уставки")] public DateTimeOffset Created { get; set; } diff --git a/DD.Persistence.IntegrationTests/Controllers/SetpointControllerTest.cs b/DD.Persistence.IntegrationTests/Controllers/SetpointControllerTest.cs index 27432f3..c27f6cc 100644 --- a/DD.Persistence.IntegrationTests/Controllers/SetpointControllerTest.cs +++ b/DD.Persistence.IntegrationTests/Controllers/SetpointControllerTest.cs @@ -7,12 +7,15 @@ using Xunit; using DD.Persistence.Client.Clients.Interfaces.Refit; using DD.Persistence.Client.Clients; using Microsoft.Extensions.Logging; +using System.Text.Json; namespace DD.Persistence.IntegrationTests.Controllers { public class SetpointControllerTest : BaseIntegrationTest { private readonly ISetpointClient setpointClient; + private readonly SetpointConfigStorage configStorage; + private class TestObject { public string? Value1 { get; set; } @@ -26,8 +29,36 @@ namespace DD.Persistence.IntegrationTests.Controllers setpointClient = scope.ServiceProvider .GetRequiredService(); + + configStorage = (SetpointConfigStorage)scope.ServiceProvider.GetRequiredService(); } + + [Fact] + public async Task GetCurrent_returns_correctType() + { + var id = Guid.Parse("e0fcad22-1761-476e-a729-a3c59d51ba41"); + + configStorage.AddOrReplace(id, typeof(float)); + + await setpointClient.Add(id, 48.3f, CancellationToken.None); + + //act + var response = await setpointClient.GetCurrent([id], CancellationToken.None); + + //assert + Assert.NotNull(response); + Assert.NotEmpty(response); + Assert.Single(response); + var item = response.First(); + Assert.Equal(item.Key, id); + + Assert.IsNotType(item.Value); + Assert.Equal(item.Value, 48.3f); + } + + + [Fact] public async Task GetCurrent_returns_success() { @@ -39,7 +70,7 @@ namespace DD.Persistence.IntegrationTests.Controllers }; //act - var response = await setpointClient.GetCurrent(setpointKeys, new CancellationToken()); + var response = await setpointClient.GetCurrent(setpointKeys, CancellationToken.None); //assert Assert.NotNull(response); diff --git a/DD.Persistence.Models/DD.Persistence.Models.csproj b/DD.Persistence.Models/DD.Persistence.Models.csproj index dc4772e..6bcae66 100644 --- a/DD.Persistence.Models/DD.Persistence.Models.csproj +++ b/DD.Persistence.Models/DD.Persistence.Models.csproj @@ -11,9 +11,9 @@ DD.Persistence.Models - 1.0.$([System.DateTime]::UtcNow.ToString(yyMM.ddHH)) + 1.2.$([System.DateTime]::UtcNow.ToString(yyMM.ddHH)) - 1.0.$([System.DateTime]::UtcNow.ToString(yyMM.ddHH)) + 1.2.$([System.DateTime]::UtcNow.ToString(yyMM.ddHH)) DD.Persistence.Models @@ -33,7 +33,7 @@ snupkg - C:\Projects\Nuget\Persistence\Models + C:\Projects\Nuget\Persistence diff --git a/DD.Persistence.Repository.Test/DD.Persistence.Repository.Test.csproj b/DD.Persistence.Repository.Test/DD.Persistence.Repository.Test.csproj new file mode 100644 index 0000000..4f29d86 --- /dev/null +++ b/DD.Persistence.Repository.Test/DD.Persistence.Repository.Test.csproj @@ -0,0 +1,30 @@ + + + + net9.0 + enable + enable + false + + + + + + + + + + + + + + + + + + + + + + + diff --git a/DD.Persistence.Repository.Test/RepositoryTestFixture.cs b/DD.Persistence.Repository.Test/RepositoryTestFixture.cs new file mode 100644 index 0000000..81e3694 --- /dev/null +++ b/DD.Persistence.Repository.Test/RepositoryTestFixture.cs @@ -0,0 +1,32 @@ + +using DD.Persistence.Database; +using DD.Persistence.Database.Model; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Caching.Memory; +using Testcontainers.PostgreSql; +using Xunit; + +namespace DD.Persistence.Repository.Test; + +public class RepositoryTestFixture : IAsyncLifetime +{ + public readonly PostgreSqlContainer dbContainer = new PostgreSqlBuilder().Build(); + + + public PersistencePostgresContext GetDbContext() => new(new DbContextOptionsBuilder() + .UseNpgsql(dbContainer.GetConnectionString()).Options); + + public IMemoryCache GetMemoryCache() => new MemoryCache(new MemoryCacheOptions()); + + public virtual async Task InitializeAsync() + { + await dbContainer.StartAsync(); + var forumDbContext = new PersistencePostgresContext(new DbContextOptionsBuilder() + .UseNpgsql(dbContainer.GetConnectionString()).Options); + + await forumDbContext.Database.MigrateAsync(); + } + + public async Task DisposeAsync() => await dbContainer.DisposeAsync(); +} + diff --git a/DD.Persistence.Repository.Test/SetpointRepositoryShould.cs b/DD.Persistence.Repository.Test/SetpointRepositoryShould.cs new file mode 100644 index 0000000..6b05ff3 --- /dev/null +++ b/DD.Persistence.Repository.Test/SetpointRepositoryShould.cs @@ -0,0 +1,56 @@ +using DD.Persistence.Database.Model; +using DD.Persistence.Repository.Repositories; +using Shouldly; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.Json; +using System.Threading.Tasks; + +namespace DD.Persistence.Repository.Test; +public class SetpointRepositoryShould : IClassFixture +{ + private readonly RepositoryTestFixture fixture; + private readonly PersistencePostgresContext context; + private readonly SetpointRepository sut; + + public SetpointRepositoryShould(RepositoryTestFixture fixture) + { + this.fixture = fixture; + context = fixture.GetDbContext(); + sut = new SetpointRepository(context); + } + + [Fact] + public async Task ReturnValueKindNumber() + { + var id = Guid.NewGuid(); + var value = GetJsonFromObject(22); + await sut.Add(id, value, Guid.NewGuid(), CancellationToken.None); + + var t = fixture.dbContainer.GetConnectionString(); + //act + var result = await sut.GetCurrent([id], CancellationToken.None); + + + //assert + result.ShouldNotBeNull(); + result.ShouldNotBeEmpty(); + + var setpoint = result.First(); + + setpoint.Value.ShouldNotBeNull(); + setpoint + .Value.ShouldBeOfType() + .ValueKind.ShouldBe(JsonValueKind.Number); + } + + private JsonElement GetJsonFromObject(object value) + { + var jsonString = JsonSerializer.Serialize(value); + var doc = JsonDocument.Parse(jsonString); + return doc.RootElement; + } + +} diff --git a/DD.Persistence.Repository/Repositories/SetpointRepository.cs b/DD.Persistence.Repository/Repositories/SetpointRepository.cs index f7a719a..30e67d5 100644 --- a/DD.Persistence.Repository/Repositories/SetpointRepository.cs +++ b/DD.Persistence.Repository/Repositories/SetpointRepository.cs @@ -3,6 +3,7 @@ using Microsoft.EntityFrameworkCore; using DD.Persistence.Database.Model; using DD.Persistence.Models; using DD.Persistence.Repositories; +using System.Text.Json; namespace DD.Persistence.Repository.Repositories { @@ -16,16 +17,33 @@ namespace DD.Persistence.Repository.Repositories protected virtual IQueryable GetQueryReadOnly() => db.Set(); - public async Task> GetCurrent(IEnumerable setpointKeys, CancellationToken token) + public async Task> GetCurrent( + IEnumerable setpointKeys, + CancellationToken token) { var query = GetQueryReadOnly(); + var entities = await query .Where(e => setpointKeys.Contains(e.Key)) + .GroupBy(e => e.Key) + .Select(g => g.OrderByDescending(x => x.Created).FirstOrDefault()) .ToArrayAsync(token); - var dtos = entities.Select(e => e.Adapt()); + var dtos = entities.Select(e => e.Adapt()); return dtos; } + public async Task> GetCurrentDictionary(IEnumerable setpointKeys, CancellationToken token) + { + var query = GetQueryReadOnly(); + + var entities = await query + .Where(e => setpointKeys.Contains(e.Key)) + .GroupBy(e => e.Key) + .Select(g => g.OrderByDescending(x => x.Created).FirstOrDefault()) + .ToDictionaryAsync(x=> x.Key, x => (object)x.Value, token); + + return entities; + } public async Task> GetHistory(IEnumerable setpointKeys, DateTimeOffset historyMoment, CancellationToken token) { @@ -88,7 +106,7 @@ namespace DD.Persistence.Repository.Repositories return dtos; } - public async Task Add(Guid setpointKey, object newValue, Guid idUser, CancellationToken token) + public async Task Add(Guid setpointKey, JsonElement newValue, Guid idUser, CancellationToken token) { var entity = new Setpoint() { @@ -101,5 +119,7 @@ namespace DD.Persistence.Repository.Repositories await db.Set().AddAsync(entity, token); await db.SaveChangesAsync(token); } + + } } diff --git a/DD.Persistence.sln b/DD.Persistence.sln index 5fb5aee..eeb198c 100644 --- a/DD.Persistence.sln +++ b/DD.Persistence.sln @@ -21,6 +21,13 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DD.Persistence.App", "DD.Pe EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DD.Persistence.Models", "DD.Persistence.Models\DD.Persistence.Models.csproj", "{698B4571-BB7A-4A42-8B0B-6C7F2F5360FB}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DD.Persistence.Repository.Test", "DD.Persistence.Repository.Test\DD.Persistence.Repository.Test.csproj", "{08B03623-A1C9-482F-B60E-09F293E04999}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SolutionItems", "SolutionItems", "{36D591C7-65C7-A0D1-1CBC-10CDE441BDC8}" + ProjectSection(SolutionItems) = preProject + Directory.Build.props = Directory.Build.props + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -63,6 +70,10 @@ Global {698B4571-BB7A-4A42-8B0B-6C7F2F5360FB}.Debug|Any CPU.Build.0 = Debug|Any CPU {698B4571-BB7A-4A42-8B0B-6C7F2F5360FB}.Release|Any CPU.ActiveCfg = Release|Any CPU {698B4571-BB7A-4A42-8B0B-6C7F2F5360FB}.Release|Any CPU.Build.0 = Release|Any CPU + {08B03623-A1C9-482F-B60E-09F293E04999}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {08B03623-A1C9-482F-B60E-09F293E04999}.Debug|Any CPU.Build.0 = Debug|Any CPU + {08B03623-A1C9-482F-B60E-09F293E04999}.Release|Any CPU.ActiveCfg = Release|Any CPU + {08B03623-A1C9-482F-B60E-09F293E04999}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/DD.Persistence/API/ISetpointApi.cs b/DD.Persistence/API/ISetpointApi.cs index f600f99..138e336 100644 --- a/DD.Persistence/API/ISetpointApi.cs +++ b/DD.Persistence/API/ISetpointApi.cs @@ -14,7 +14,7 @@ public interface ISetpointApi : ISyncApi /// ключи уставок /// /// - Task>> GetCurrent(IEnumerable setpoitKeys, CancellationToken token); + Task>> GetCurrent(IEnumerable setpoitKeys, CancellationToken token); /// /// Получить значения уставок за определенный момент времени diff --git a/DD.Persistence/Repositories/ISetpointRepository.cs b/DD.Persistence/Repositories/ISetpointRepository.cs index 0af805d..165ce29 100644 --- a/DD.Persistence/Repositories/ISetpointRepository.cs +++ b/DD.Persistence/Repositories/ISetpointRepository.cs @@ -1,4 +1,5 @@ using DD.Persistence.Models; +using System.Text.Json; namespace DD.Persistence.Repositories; @@ -15,6 +16,14 @@ public interface ISetpointRepository /// Task> GetCurrent(IEnumerable setpointKeys, CancellationToken token); + /// + /// Получить значения уставок по набору ключей + /// + /// + /// + /// + Task> GetCurrentDictionary(IEnumerable setpointKeys, CancellationToken token); + /// /// Получить значения уставок за определенный момент времени /// @@ -58,5 +67,5 @@ public interface ISetpointRepository /// /// to do /// id User учесть в соответствующем методе репозитория - Task Add(Guid setpointKey, object newValue, Guid idUser, CancellationToken token); + Task Add(Guid setpointKey, JsonElement newValue, Guid idUser, CancellationToken token); } diff --git a/Directory.Build.props b/Directory.Build.props new file mode 100644 index 0000000..cffb4fe --- /dev/null +++ b/Directory.Build.props @@ -0,0 +1,15 @@ + + + + + + <_Parameter1>$(AssemblyName).Test + + + <_Parameter1>DD.Persistence.IntegrationTests + + + <_Parameter1>DynamicProxyGenAssembly2 + + + \ No newline at end of file