Новая фабрика клиентов #17

Merged
on.nemtina merged 7 commits from feature/add-refit-factory into master 2025-01-10 13:54:19 +05:00
14 changed files with 399 additions and 387 deletions
Showing only changes of commit 6873a32667 - Show all commits

View File

@ -6,7 +6,7 @@ namespace DD.Persistence.Client.Clients.Interfaces;
/// Клиент для работы с временными данными
/// </summary>
/// <typeparam name="TDto"></typeparam>
public interface ITimeSeriesClient<TDto> : IDisposable where TDto : class, new()
public interface ITimeSeriesClient<TDto> : IDisposable where TDto : class, ITimeSeriesAbstractDto
{
/// <summary>
/// Добавление записей

View File

@ -5,7 +5,7 @@ using Refit;
namespace DD.Persistence.Client.Clients.Interfaces.Refit
{
public interface IRefitTechMessagesClient : IDisposable
public interface IRefitTechMessagesClient : IRefitClient, IDisposable
{
private const string BaseRoute = "/api/techMessages";

View File

@ -2,8 +2,8 @@ using DD.Persistence.Models;
using Refit;
namespace DD.Persistence.Client.Clients.Interfaces.Refit;
public interface IRefitTimeSeriesClient<TDto> : IDisposable
where TDto : class, new()
public interface IRefitTimeSeriesClient<TDto> : IRefitClient, IDisposable
where TDto : class, ITimeSeriesAbstractDto
{
private const string BaseRoute = "/api/dataSaub";

View File

@ -3,7 +3,7 @@ using Refit;
namespace DD.Persistence.Client.Clients.Interfaces.Refit;
public interface IRefitTimestampedSetClient : IDisposable
public interface IRefitTimestampedSetClient : IRefitClient, IDisposable
{
private const string baseUrl = "/api/TimestampedSet/{idDiscriminator}";

View File

@ -11,9 +11,9 @@ public class TechMessagesClient : BaseClient, ITechMessagesClient
{
private readonly IRefitTechMessagesClient refitTechMessagesClient;
public TechMessagesClient(IRefitTechMessagesClient refitTechMessagesClient, ILogger<TechMessagesClient> logger) : base(logger)
public TechMessagesClient(IRefitClientFactory<IRefitTechMessagesClient> refitTechMessagesClientFactory, ILogger<TechMessagesClient> logger) : base(logger)
{
this.refitTechMessagesClient = refitTechMessagesClient;
this.refitTechMessagesClient = refitTechMessagesClientFactory.Create();
}
public async Task<PaginationContainer<TechMessageDto>> GetPage(PaginationRequest request, CancellationToken token)

View File

@ -5,13 +5,13 @@ using DD.Persistence.Client.Clients.Interfaces.Refit;
using DD.Persistence.Models;
namespace DD.Persistence.Client.Clients;
public class TimeSeriesClient<TDto> : BaseClient, ITimeSeriesClient<TDto> where TDto : class, new()
public class TimeSeriesClient<TDto> : BaseClient, ITimeSeriesClient<TDto> where TDto : class, ITimeSeriesAbstractDto
{
private readonly IRefitTimeSeriesClient<TDto> timeSeriesClient;
public TimeSeriesClient(IRefitTimeSeriesClient<TDto> refitTechMessagesClient, ILogger<TimeSeriesClient<TDto>> logger) : base(logger)
public TimeSeriesClient(IRefitClientFactory<IRefitTimeSeriesClient<TDto>> refitTechMessagesClientFactory, ILogger<TimeSeriesClient<TDto>> logger) : base(logger)
{
this.timeSeriesClient = refitTechMessagesClient;
this.timeSeriesClient = refitTechMessagesClientFactory.Create();
}
public async Task<int> AddRange(IEnumerable<TDto> dtos, CancellationToken token)

View File

@ -9,9 +9,9 @@ public class TimestampedSetClient : BaseClient, ITimestampedSetClient
{
private readonly IRefitTimestampedSetClient refitTimestampedSetClient;
public TimestampedSetClient(IRefitTimestampedSetClient refitTimestampedSetClient, ILogger<TimestampedSetClient> logger) : base(logger)
public TimestampedSetClient(IRefitClientFactory<IRefitTimestampedSetClient> refitTimestampedSetClientFactory, ILogger<TimestampedSetClient> logger) : base(logger)
{
this.refitTimestampedSetClient = refitTimestampedSetClient;
this.refitTimestampedSetClient = refitTimestampedSetClientFactory.Create();
}
public async Task<int> AddRange(Guid idDiscriminator, IEnumerable<TimestampedSetDto> sets, CancellationToken token)

View File

@ -9,9 +9,9 @@ public class WitsDataClient : BaseClient, IWitsDataClient
{
private readonly IRefitWitsDataClient refitWitsDataClient;
public WitsDataClient(IRefitWitsDataClient refitWitsDataClient, ILogger<WitsDataClient> logger) : base(logger)
public WitsDataClient(IRefitClientFactory<IRefitWitsDataClient> refitWitsDataClientFactory, ILogger<WitsDataClient> logger) : base(logger)
{
this.refitWitsDataClient = refitWitsDataClient;
this.refitWitsDataClient = refitWitsDataClientFactory.Create();
}
public async Task<int> AddRange(IEnumerable<WitsDataDto> dtos, CancellationToken token)

View File

@ -1,5 +1,6 @@
using DD.Persistence.Client.Clients;
using DD.Persistence.Client.Clients.Interfaces;
using DD.Persistence.Models;
using Microsoft.Extensions.DependencyInjection;
namespace DD.Persistence.Client;
@ -16,14 +17,14 @@ public static class DependencyInjection
/// <returns></returns>
public static IServiceCollection AddPersistenceClients(this IServiceCollection services)
{
services.AddSingleton(typeof(IRefitClientFactory<>), typeof(RefitClientFactory<>));
services.AddTransient(typeof(IRefitClientFactory<>), typeof(RefitClientFactory<>));
services.AddTransient<IChangeLogClient, ChangeLogClient>();
services.AddTransient<IDataSourceSystemClient, DataSourceSystemClient>();
services.AddTransient<ISetpointClient, SetpointClient>();
//services.AddTransient<ITechMessagesClient, TechMessagesClient>();
//services.AddTransient<ITimeSeriesClient<>, TimeSeriesClient<>>();
//services.AddTransient<ITimeSeriesClient, TimeSeriesClient>();
//services.AddTransient<IWitsDataClient, WitsDataClient>();
services.AddTransient<ITechMessagesClient, TechMessagesClient>();
services.AddTransient<ITimeSeriesClient<DataSaubDto>, TimeSeriesClient<DataSaubDto>>();
services.AddTransient<ITimestampedSetClient, TimestampedSetClient>();
services.AddTransient<IWitsDataClient, WitsDataClient>();
return services;
}
}

View File

@ -1,146 +1,146 @@
using Microsoft.Extensions.Configuration;
using DD.Persistence.Client.Clients.Interfaces;
using DD.Persistence.Client.Clients;
using DD.Persistence.Client.Helpers;
using Refit;
using DD.Persistence.Factories;
using DD.Persistence.Client.Clients.Interfaces.Refit;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.DependencyInjection;
using System.Text.Json;
//using Microsoft.Extensions.Configuration;
//using DD.Persistence.Client.Clients.Interfaces;
//using DD.Persistence.Client.Clients;
//using DD.Persistence.Client.Helpers;
//using Refit;
//using DD.Persistence.Factories;
//using DD.Persistence.Client.Clients.Interfaces.Refit;
//using Microsoft.Extensions.Logging;
//using Microsoft.Extensions.DependencyInjection;
//using System.Text.Json;
namespace DD.Persistence.Client
{
/// <summary>
/// Фабрика клиентов для доступа к Persistence - сервису
/// </summary>
public class PersistenceClientFactory
{
private static readonly JsonSerializerOptions JsonSerializerOptions = new()
{
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
PropertyNameCaseInsensitive = true
};
private static readonly RefitSettings RefitSettings = new(new SystemTextJsonContentSerializer(JsonSerializerOptions));
private readonly IServiceProvider provider;
private HttpClient httpClient;
public PersistenceClientFactory(IHttpClientFactory httpClientFactory, IServiceProvider provider, IConfiguration configuration)
{
this.provider = provider;
httpClient = httpClientFactory.CreateClient();
httpClient.Authorize(configuration);
}
public PersistenceClientFactory(IHttpClientFactory httpClientFactory, IAuthTokenFactory authTokenFactory, IServiceProvider provider, IConfiguration configuration)
{
this.provider = provider;
httpClient = httpClientFactory.CreateClient();
var token = authTokenFactory.GetToken();
httpClient.Authorize(token);
}
/// <summary>
/// Получить клиент для работы с уставками
/// </summary>
/// <returns></returns>
//public ISetpointClient GetSetpointClient()
//namespace DD.Persistence.Client
//{
// var logger = provider.GetRequiredService<ILogger<SetpointClient>>();
// /// <summary>
// /// Фабрика клиентов для доступа к Persistence - сервису
// /// </summary>
// public class PersistenceClientFactory
// {
// private static readonly JsonSerializerOptions JsonSerializerOptions = new()
// {
// PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
// PropertyNameCaseInsensitive = true
// };
// private static readonly RefitSettings RefitSettings = new(new SystemTextJsonContentSerializer(JsonSerializerOptions));
// private readonly IServiceProvider provider;
// private HttpClient httpClient;
// public PersistenceClientFactory(IHttpClientFactory httpClientFactory, IServiceProvider provider, IConfiguration configuration)
// {
// this.provider = provider;
// var restClient = RestService.For<IRefitSetpointClient>(httpClient, RefitSettings);
// var client = new SetpointClient(restClient, logger);
// httpClient = httpClientFactory.CreateClient();
// return client;
// httpClient.Authorize(configuration);
// }
/// <summary>
/// Получить клиент для работы с технологическими сообщениями
/// </summary>
/// <returns></returns>
public ITechMessagesClient GetTechMessagesClient()
{
var logger = provider.GetRequiredService<ILogger<TechMessagesClient>>();
var restClient = RestService.For<IRefitTechMessagesClient>(httpClient, RefitSettings);
var client = new TechMessagesClient(restClient, logger);
return client;
}
/// <summary>
/// Получить клиент для работы с временными данными
/// </summary>
/// <typeparam name="TDto"></typeparam>
/// <returns></returns>
public ITimeSeriesClient<TDto> GetTimeSeriesClient<TDto>()
where TDto : class, new()
{
var logger = provider.GetRequiredService<ILogger<TimeSeriesClient<TDto>>>();
var restClient = RestService.For<IRefitTimeSeriesClient<TDto>>(httpClient, RefitSettings);
var client = new TimeSeriesClient<TDto>(restClient, logger);
return client;
}
/// <summary>
/// Получить клиент для работы с данными с отметкой времени
/// </summary>
/// <returns></returns>
public ITimestampedSetClient GetTimestampedSetClient()
{
var logger = provider.GetRequiredService<ILogger<TimestampedSetClient>>();
var restClient = RestService.For<IRefitTimestampedSetClient>(httpClient, RefitSettings);
var client = new TimestampedSetClient(restClient, logger);
return client;
}
/// <summary>
/// Получить клиент для работы с записями ChangeLog
/// </summary>
/// <returns></returns>
//public IChangeLogClient GetChangeLogClient()
// public PersistenceClientFactory(IHttpClientFactory httpClientFactory, IAuthTokenFactory authTokenFactory, IServiceProvider provider, IConfiguration configuration)
// {
// var logger = provider.GetRequiredService<ILogger<ChangeLogClient>>();
// this.provider = provider;
// var restClient = RestService.For<IRefitChangeLogClient>(httpClient, RefitSettings);
// var client = new ChangeLogClient(restClient, logger);
// httpClient = httpClientFactory.CreateClient();
// return client;
// var token = authTokenFactory.GetToken();
// httpClient.Authorize(token);
// }
/// <summary>
/// Получить клиент для работы c параметрами Wits
/// </summary>
/// <returns></returns>
public IWitsDataClient GetWitsDataClient()
{
var logger = provider.GetRequiredService<ILogger<WitsDataClient>>();
// /// <summary>
// /// Получить клиент для работы с уставками
// /// </summary>
// /// <returns></returns>
// //public ISetpointClient GetSetpointClient()
// //{
// // var logger = provider.GetRequiredService<ILogger<SetpointClient>>();
var restClient = RestService.For<IRefitWitsDataClient>(httpClient, RefitSettings);
var client = new WitsDataClient(restClient, logger);
// // var restClient = RestService.For<IRefitSetpointClient>(httpClient, RefitSettings);
// // var client = new SetpointClient(restClient, logger);
return client;
}
// // return client;
// //}
/// <summary>
/// Получить клиент для работы c системами
/// </summary>
/// <returns></returns>
//public IDataSourceSystemClient GetDataSourceSystemClient()
//{
// var logger = provider.GetRequiredService<ILogger<DataSourceSystemClient>>();
// /// <summary>
// /// Получить клиент для работы с технологическими сообщениями
// /// </summary>
// /// <returns></returns>
// //public ITechMessagesClient GetTechMessagesClient()
// //{
// // var logger = provider.GetRequiredService<ILogger<TechMessagesClient>>();
// var restClient = RestService.For<IRefitDataSourceSystemClient>(httpClient, RefitSettings);
// var client = new DataSourceSystemClient(restClient, logger);
// // var restClient = RestService.For<IRefitTechMessagesClient>(httpClient, RefitSettings);
// // var client = new TechMessagesClient(restClient, logger);
// return client;
// // return client;
// //}
// /// <summary>
// /// Получить клиент для работы с временными данными
// /// </summary>
// /// <typeparam name="TDto"></typeparam>
// /// <returns></returns>
// //public ITimeSeriesClient<TDto> GetTimeSeriesClient<TDto>()
// // where TDto : class, new()
// //{
// // var logger = provider.GetRequiredService<ILogger<TimeSeriesClient<TDto>>>();
// // var restClient = RestService.For<IRefitTimeSeriesClient<TDto>>(httpClient, RefitSettings);
// // var client = new TimeSeriesClient<TDto>(restClient, logger);
// // return client;
// //}
// /// <summary>
// /// Получить клиент для работы с данными с отметкой времени
// /// </summary>
// /// <returns></returns>
// //public ITimestampedSetClient GetTimestampedSetClient()
// //{
// // var logger = provider.GetRequiredService<ILogger<TimestampedSetClient>>();
// // var restClient = RestService.For<IRefitTimestampedSetClient>(httpClient, RefitSettings);
// // var client = new TimestampedSetClient(restClient, logger);
// // return client;
// //}
// /// <summary>
// /// Получить клиент для работы с записями ChangeLog
// /// </summary>
// /// <returns></returns>
// //public IChangeLogClient GetChangeLogClient()
// //{
// // var logger = provider.GetRequiredService<ILogger<ChangeLogClient>>();
// // var restClient = RestService.For<IRefitChangeLogClient>(httpClient, RefitSettings);
// // var client = new ChangeLogClient(restClient, logger);
// // return client;
// //}
// /// <summary>
// /// Получить клиент для работы c параметрами Wits
// /// </summary>
// /// <returns></returns>
// //public IWitsDataClient GetWitsDataClient()
// //{
// // var logger = provider.GetRequiredService<ILogger<WitsDataClient>>();
// // var restClient = RestService.For<IRefitWitsDataClient>(httpClient, RefitSettings);
// // var client = new WitsDataClient(restClient, logger);
// // return client;
// //}
// /// <summary>
// /// Получить клиент для работы c системами
// /// </summary>
// /// <returns></returns>
// //public IDataSourceSystemClient GetDataSourceSystemClient()
// //{
// // var logger = provider.GetRequiredService<ILogger<DataSourceSystemClient>>();
// // var restClient = RestService.For<IRefitDataSourceSystemClient>(httpClient, RefitSettings);
// // var client = new DataSourceSystemClient(restClient, logger);
// // return client;
// //}
// }
//}
}
}

View File

@ -1,12 +1,14 @@
using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.DependencyInjection;
using DD.Persistence.Client;
using DD.Persistence.Client;
using DD.Persistence.Client.Clients;
using DD.Persistence.Client.Clients.Interfaces;
using DD.Persistence.Client.Clients.Interfaces.Refit;
using DD.Persistence.Database.Entity;
using DD.Persistence.Models;
using DD.Persistence.Models.Enumerations;
using DD.Persistence.Models.Requests;
using System.Net;
using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Xunit;
namespace DD.Persistence.IntegrationTests.Controllers
@ -18,11 +20,12 @@ namespace DD.Persistence.IntegrationTests.Controllers
private readonly IMemoryCache memoryCache;
public TechMessagesControllerTest(WebAppFactoryFixture factory) : base(factory)
{
var scope = factory.Services.CreateScope();
var persistenceClientFactory = scope.ServiceProvider
.GetRequiredService<PersistenceClientFactory>();
var refitClientFactory = scope.ServiceProvider
.GetRequiredService<IRefitClientFactory<IRefitTechMessagesClient>>();
var logger = scope.ServiceProvider.GetRequiredService<ILogger<TechMessagesClient>>();
techMessagesClient = persistenceClientFactory.GetTechMessagesClient();
techMessagesClient = scope.ServiceProvider
.GetRequiredService<ITechMessagesClient>();
memoryCache = scope.ServiceProvider.GetRequiredService<IMemoryCache>();
}

View File

@ -1,16 +1,19 @@
using DD.Persistence.Client;
using DD.Persistence.Client.Clients;
using DD.Persistence.Client.Clients.Interfaces;
using DD.Persistence.Client.Clients.Interfaces.Refit;
using DD.Persistence.Database.Model;
using DD.Persistence.Models;
using Mapster;
using Microsoft.Extensions.DependencyInjection;
using DD.Persistence.Client;
using DD.Persistence.Client.Clients.Interfaces;
using DD.Persistence.Database.Model;
using System.Net;
using Microsoft.Extensions.Logging;
using Xunit;
namespace DD.Persistence.IntegrationTests.Controllers;
public abstract class TimeSeriesBaseControllerTest<TEntity, TDto> : BaseIntegrationTest
where TEntity : class, ITimestampedData, new()
where TDto : class, new()
where TDto : class, ITimeSeriesAbstractDto, new()
{
private readonly ITimeSeriesClient<TDto> timeSeriesClient;
@ -18,11 +21,12 @@ public abstract class TimeSeriesBaseControllerTest<TEntity, TDto> : BaseIntegrat
{
dbContext.CleanupDbSet<TEntity>();
var scope = factory.Services.CreateScope();
var persistenceClientFactory = scope.ServiceProvider
.GetRequiredService<PersistenceClientFactory>();
var refitClientFactory = scope.ServiceProvider
.GetRequiredService<IRefitClientFactory<IRefitTimeSeriesClient<TDto>>>();
var logger = scope.ServiceProvider.GetRequiredService<ILogger<TimeSeriesClient<TDto>>>();
timeSeriesClient = persistenceClientFactory.GetTimeSeriesClient<TDto>();
timeSeriesClient = scope.ServiceProvider
.GetRequiredService<ITimeSeriesClient<TDto>>();
}
public async Task InsertRangeSuccess(TDto dto)

View File

@ -3,6 +3,9 @@ using DD.Persistence.Client;
using DD.Persistence.Client.Clients.Interfaces;
using DD.Persistence.Models;
using Xunit;
using DD.Persistence.Client.Clients.Interfaces.Refit;
using DD.Persistence.Client.Clients;
using Microsoft.Extensions.Logging;
namespace DD.Persistence.IntegrationTests.Controllers;
public class TimestampedSetControllerTest : BaseIntegrationTest
@ -11,10 +14,12 @@ public class TimestampedSetControllerTest : BaseIntegrationTest
public TimestampedSetControllerTest(WebAppFactoryFixture factory) : base(factory)
{
var persistenceClientFactory = scope.ServiceProvider
.GetRequiredService<PersistenceClientFactory>();
var refitClientFactory = scope.ServiceProvider
.GetRequiredService<IRefitClientFactory<IRefitTimestampedSetClient>>();
var logger = scope.ServiceProvider.GetRequiredService<ILogger<TimestampedSetClient>>();
client = persistenceClientFactory.GetTimestampedSetClient();
client = scope.ServiceProvider
.GetRequiredService<ITimestampedSetClient>();
}
[Fact]

View File

@ -1,13 +1,12 @@
using Microsoft.Extensions.DependencyInjection;
using DD.Persistence.Client;
using DD.Persistence.Client.Clients;
using DD.Persistence.Client.Clients.Interfaces;
using DD.Persistence.Client.Clients.Interfaces.Refit;
using DD.Persistence.Database.Entity;
using DD.Persistence.Models;
using System.Net;
using Xunit;
using DD.Persistence.Client.Clients.Interfaces;
using DD.Persistence.Client;
using DD.Persistence.Client.Clients.Interfaces.Refit;
using DD.Persistence.Client.Clients;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Xunit;
namespace DD.Persistence.IntegrationTests.Controllers;
public class WitsDataControllerTest : BaseIntegrationTest