From 209cd79f0127cab1f3decaf52e8ce88e8207299d Mon Sep 17 00:00:00 2001 From: "HOME-LAPTOP\\kshkulev" Date: Thu, 9 Oct 2025 19:12:30 +0900 Subject: [PATCH] Add mocked broker client --- Hcs.Broker.Mock/Api/MockBillsApi.cs | 42 +++++++ Hcs.Broker.Mock/Api/MockDeviceMeteringApi.cs | 26 ++++ Hcs.Broker.Mock/Api/MockHouseManagementApi.cs | 114 ++++++++++++++++++ Hcs.Broker.Mock/Api/MockNsiApi.cs | 17 +++ Hcs.Broker.Mock/Api/MockNsiCommonApi.cs | 25 ++++ .../Api/MockOrgRegistryCommonApi.cs | 25 ++++ Hcs.Broker.Mock/Api/MockPaymentsApi.cs | 25 ++++ Hcs.Broker.Mock/Hcs.Broker.Mock.csproj | 13 ++ Hcs.Broker.Mock/MockClient.cs | 48 ++++++++ Hcs.Broker/Api/BillsApi.cs | 39 +----- Hcs.Broker/Api/DeviceMeteringApi.cs | 18 +-- Hcs.Broker/Api/HouseManagementApi.cs | 94 +++------------ Hcs.Broker/Api/IBillsApi.cs | 48 ++++++++ Hcs.Broker/Api/IDeviceMeteringApi.cs | 25 ++++ Hcs.Broker/Api/IHouseManagementApi.cs | 112 +++++++++++++++++ Hcs.Broker/Api/INsiApi.cs | 16 +++ Hcs.Broker/Api/INsiCommonApi.cs | 25 ++++ Hcs.Broker/Api/IOrgRegistryCommonApi.cs | 25 ++++ Hcs.Broker/Api/IPaymentsApi.cs | 24 ++++ Hcs.Broker/Api/NsiApi.cs | 11 +- Hcs.Broker/Api/NsiCommonApi.cs | 19 +-- Hcs.Broker/Api/OrgRegistryCommonApi.cs | 19 +-- Hcs.Broker/Api/PaymentsApi.cs | 18 +-- Hcs.Broker/Client.cs | 49 +++----- Hcs.Broker/IClient.cs | 64 ++++++++++ Hcs.WebApp/Components/Pages/Test/Export.razor | 19 +-- Hcs.WebApp/Hcs.WebApp.csproj | 5 + Hcs.WebApp/Program.cs | 7 ++ Hcs.WebApp/Services/ClientProvider.cs | 27 +++++ Hcs.WebApp/Services/IClientProvider.cs | 11 ++ Hcs.WebApp/Services/MockClientProvider.cs | 19 +++ Hcs.sln | 5 + 32 files changed, 809 insertions(+), 225 deletions(-) create mode 100644 Hcs.Broker.Mock/Api/MockBillsApi.cs create mode 100644 Hcs.Broker.Mock/Api/MockDeviceMeteringApi.cs create mode 100644 Hcs.Broker.Mock/Api/MockHouseManagementApi.cs create mode 100644 Hcs.Broker.Mock/Api/MockNsiApi.cs create mode 100644 Hcs.Broker.Mock/Api/MockNsiCommonApi.cs create mode 100644 Hcs.Broker.Mock/Api/MockOrgRegistryCommonApi.cs create mode 100644 Hcs.Broker.Mock/Api/MockPaymentsApi.cs create mode 100644 Hcs.Broker.Mock/Hcs.Broker.Mock.csproj create mode 100644 Hcs.Broker.Mock/MockClient.cs create mode 100644 Hcs.Broker/Api/IBillsApi.cs create mode 100644 Hcs.Broker/Api/IDeviceMeteringApi.cs create mode 100644 Hcs.Broker/Api/IHouseManagementApi.cs create mode 100644 Hcs.Broker/Api/INsiApi.cs create mode 100644 Hcs.Broker/Api/INsiCommonApi.cs create mode 100644 Hcs.Broker/Api/IOrgRegistryCommonApi.cs create mode 100644 Hcs.Broker/Api/IPaymentsApi.cs create mode 100644 Hcs.Broker/IClient.cs create mode 100644 Hcs.WebApp/Services/ClientProvider.cs create mode 100644 Hcs.WebApp/Services/IClientProvider.cs create mode 100644 Hcs.WebApp/Services/MockClientProvider.cs diff --git a/Hcs.Broker.Mock/Api/MockBillsApi.cs b/Hcs.Broker.Mock/Api/MockBillsApi.cs new file mode 100644 index 0000000..f89d1a2 --- /dev/null +++ b/Hcs.Broker.Mock/Api/MockBillsApi.cs @@ -0,0 +1,42 @@ +using Hcs.Broker.Api; +using Hcs.Broker.Api.Payload.Bills; +using Hcs.Service.Async.Bills; + +namespace Hcs.Broker.Mock.Api +{ + /// + public class MockBillsApi : IBillsApi + { + /// + public async Task> ExportPaymentDocumentDataByAccountNumberAsync(short year, int month, string fiasHouseGuid, string accountNumber, CancellationToken token = default) + { + await Task.Delay(3000, token); + + return []; + } + + /// + public async Task> ExportPaymentDocumentDataByPaymentDocumentIDAsync(string paymentDocumentID, CancellationToken token = default) + { + await Task.Delay(3000, token); + + return []; + } + + /// + public async Task> ExportPaymentDocumentDataByPaymentDocumentNumberAsync(short year, int month, string fiasHouseGuid, string paymentDocumentNumber, CancellationToken token = default) + { + await Task.Delay(3000, token); + + return []; + } + + /// + public async Task ImportPaymentDocumentDataAsync(ImportPaymentDocumentDataPayload payload, CancellationToken token = default) + { + await Task.Delay(3000, token); + + return true; + } + } +} diff --git a/Hcs.Broker.Mock/Api/MockDeviceMeteringApi.cs b/Hcs.Broker.Mock/Api/MockDeviceMeteringApi.cs new file mode 100644 index 0000000..00c85d4 --- /dev/null +++ b/Hcs.Broker.Mock/Api/MockDeviceMeteringApi.cs @@ -0,0 +1,26 @@ +using Hcs.Broker.Api; +using Hcs.Broker.Api.Payload.DeviceMetering; +using Hcs.Service.Async.DeviceMetering; + +namespace Hcs.Broker.Mock.Api +{ + /// + public class MockDeviceMeteringApi : IDeviceMeteringApi + { + /// + public async Task> ExportMeteringDeviceHistoryAsync(ExportMeteringDeviceHistoryPayload payload, CancellationToken token = default) + { + await Task.Delay(3000, token); + + return []; + } + + /// + public async Task ImportMeteringDeviceValuesAsync(importMeteringDeviceValuesRequestMeteringDevicesValues values, CancellationToken token = default) + { + await Task.Delay(3000, token); + + return true; + } + } +} diff --git a/Hcs.Broker.Mock/Api/MockHouseManagementApi.cs b/Hcs.Broker.Mock/Api/MockHouseManagementApi.cs new file mode 100644 index 0000000..e14d6b6 --- /dev/null +++ b/Hcs.Broker.Mock/Api/MockHouseManagementApi.cs @@ -0,0 +1,114 @@ +using Hcs.Broker.Api; +using Hcs.Broker.Api.Payload.HouseManagement; +using Hcs.Service.Async.HouseManagement; + +namespace Hcs.Broker.Mock.Api +{ + /// + public class MockHouseManagementApi : IHouseManagementApi + { + /// + public async Task> ExportAccountAsync(string fiasHouseGuid, CancellationToken token = default) + { + await Task.Delay(3000, token); + + return []; + } + + /// + public async Task> ExportHouseAsync(string fiasHouseGuid, CancellationToken token = default) + { + await Task.Delay(3000, token); + + return []; + } + + /// + public async Task> ExportSupplyResourceContractDataAsync(CancellationToken token = default) + { + await Task.Delay(3000, token); + + return []; + } + + /// + public async Task ExportSupplyResourceContractDataAsync(Guid contractRootGuid, CancellationToken token = default) + { + await Task.Delay(3000, token); + + return null; + } + + /// + public async Task ExportSupplyResourceContractDataAsync(string contractNumber, CancellationToken token = default) + { + await Task.Delay(3000, token); + + return null; + } + + /// + public async Task> ExportSupplyResourceContractObjectAddressDataAsync(Guid contractRootGuid, CancellationToken token = default) + { + await Task.Delay(3000, token); + + return []; + } + + /// + public async Task ImportAccountDataAsync(ImportAccountDataPayload payload, CancellationToken token = default) + { + await Task.Delay(3000, token); + + return true; + } + + /// + public async Task ImportContractDataAsync(ImportContractDataPayload payload, CancellationToken token = default) + { + await Task.Delay(3000, token); + + return null; + } + + /// + public async Task ImportHouseUODataAsync(ImportLivingHouseUODataPayload payload, CancellationToken token = default) + { + await Task.Delay(3000, token); + + return true; + } + + /// + public async Task ImportMeteringDeviceDataAsync(MeteringDeviceFullInformationType meteringDevice, CancellationToken token = default) + { + await Task.Delay(3000, token); + + return true; + } + + /// + public async Task ImportNotificationDataAsync(ImportNotificationDataPayload payload, CancellationToken token = default) + { + await Task.Delay(3000, token); + + return true; + } + + /// + public async Task ImportSupplyResourceContractDataAsync(ImportSupplyResourceContractDataPayload payload, CancellationToken token = default) + { + await Task.Delay(3000, token); + + return null; + } + + /// + public async Task ImportSupplyResourceContractProjectAsync(ImportSupplyResourceContractProjectPayload payload, CancellationToken token = default) + { + await Task.Delay(3000, token); + + return null; + } + } +} diff --git a/Hcs.Broker.Mock/Api/MockNsiApi.cs b/Hcs.Broker.Mock/Api/MockNsiApi.cs new file mode 100644 index 0000000..abe40b2 --- /dev/null +++ b/Hcs.Broker.Mock/Api/MockNsiApi.cs @@ -0,0 +1,17 @@ +using Hcs.Broker.Api; +using Hcs.Service.Async.Nsi; + +namespace Hcs.Broker.Mock.Api +{ + /// + public class MockNsiApi : INsiApi + { + /// + public async Task> ExportDataProviderNsiItemAsync(exportDataProviderNsiItemRequestRegistryNumber registryNumber, CancellationToken token = default) + { + await Task.Delay(3000, token); + + return []; + } + } +} diff --git a/Hcs.Broker.Mock/Api/MockNsiCommonApi.cs b/Hcs.Broker.Mock/Api/MockNsiCommonApi.cs new file mode 100644 index 0000000..8c50ea0 --- /dev/null +++ b/Hcs.Broker.Mock/Api/MockNsiCommonApi.cs @@ -0,0 +1,25 @@ +using Hcs.Broker.Api; +using Hcs.Service.Async.NsiCommon; + +namespace Hcs.Broker.Mock.Api +{ + /// + public class MockNsiCommonApi : INsiCommonApi + { + /// + public async Task ExportNsiItemAsync(int registryNumber, ListGroup listGroup, CancellationToken token = default) + { + await Task.Delay(3000, token); + + return null; + } + + /// + public async Task ExportNsiListAsync(ListGroup listGroup, CancellationToken token = default) + { + await Task.Delay(3000, token); + + return null; + } + } +} diff --git a/Hcs.Broker.Mock/Api/MockOrgRegistryCommonApi.cs b/Hcs.Broker.Mock/Api/MockOrgRegistryCommonApi.cs new file mode 100644 index 0000000..9a21e06 --- /dev/null +++ b/Hcs.Broker.Mock/Api/MockOrgRegistryCommonApi.cs @@ -0,0 +1,25 @@ +using Hcs.Broker.Api; +using Hcs.Service.Async.OrgRegistryCommon; + +namespace Hcs.Broker.Mock.Api +{ + /// + public class MockOrgRegistryCommonApi : IOrgRegistryCommonApi + { + /// + public async Task> ExportDataProviderAsync(bool isActual, CancellationToken token = default) + { + await Task.Delay(3000, token); + + return []; + } + + /// + public async Task> ExportOrgRegistryAsync(string ogrn, string kpp, CancellationToken token = default) + { + await Task.Delay(3000, token); + + return []; + } + } +} diff --git a/Hcs.Broker.Mock/Api/MockPaymentsApi.cs b/Hcs.Broker.Mock/Api/MockPaymentsApi.cs new file mode 100644 index 0000000..ec581ea --- /dev/null +++ b/Hcs.Broker.Mock/Api/MockPaymentsApi.cs @@ -0,0 +1,25 @@ +using Hcs.Broker.Api; +using Hcs.Broker.Api.Payload.Payments; + +namespace Hcs.Broker.Mock.Api +{ + /// + public class MockPaymentsApi : IPaymentsApi + { + /// + public async Task ImportNotificationsOfOrderExecutionAsync(ImportNotificationsOfOrderExecutionPayload payload, CancellationToken token = default) + { + await Task.Delay(3000, token); + + return true; + } + + /// + public async Task ImportSupplierNotificationsOfOrderExecutionAsync(ImportSupplierNotificationsOfOrderExecutionPayload payload, CancellationToken token = default) + { + await Task.Delay(3000, token); + + return true; + } + } +} diff --git a/Hcs.Broker.Mock/Hcs.Broker.Mock.csproj b/Hcs.Broker.Mock/Hcs.Broker.Mock.csproj new file mode 100644 index 0000000..6cefae8 --- /dev/null +++ b/Hcs.Broker.Mock/Hcs.Broker.Mock.csproj @@ -0,0 +1,13 @@ + + + + net8.0 + enable + enable + + + + + + + diff --git a/Hcs.Broker.Mock/MockClient.cs b/Hcs.Broker.Mock/MockClient.cs new file mode 100644 index 0000000..57b0bed --- /dev/null +++ b/Hcs.Broker.Mock/MockClient.cs @@ -0,0 +1,48 @@ +using Hcs.Broker.Api; +using Hcs.Broker.Logger; +using Hcs.Broker.MessageCapturer; +using Hcs.Broker.Mock.Api; + +namespace Hcs.Broker.Mock +{ + /// + public class MockClient : IClient + { + /// + public string OrgPPAGUID { get; set; } + + /// + public string ExecutorGUID { get; set; } + + /// + public bool UseTunnel { get; set; } + + /// + public bool IsPPAK { get; set; } + + /// + public OrganizationRole Role { get; set; } + + /// + public ILogger Logger { get; set; } + + /// + public IMessageCapturer MessageCapturer { get; set; } + + public IBillsApi Bills => new MockBillsApi(); + + public IDeviceMeteringApi DeviceMetering => new MockDeviceMeteringApi(); + + public IHouseManagementApi HouseManagement => new MockHouseManagementApi(); + + public INsiApi Nsi => new MockNsiApi(); + + public INsiCommonApi NsiCommon => new MockNsiCommonApi(); + + public IOrgRegistryCommonApi OrgRegistryCommon => new MockOrgRegistryCommonApi(); + + public IPaymentsApi Payments => new MockPaymentsApi(); + + public void SetSigningCertificate(string serialNumber, string? pin = null) { } + } +} diff --git a/Hcs.Broker/Api/BillsApi.cs b/Hcs.Broker/Api/BillsApi.cs index fe3f89f..b3504bc 100644 --- a/Hcs.Broker/Api/BillsApi.cs +++ b/Hcs.Broker/Api/BillsApi.cs @@ -4,58 +4,31 @@ using Hcs.Service.Async.Bills; namespace Hcs.Broker.Api { - // http://open-gkh.ru/BillsServiceAsync/ - public class BillsApi(Client client) : ApiBase(client) + /// + public class BillsApi(Client client) : ApiBase(client), IBillsApi { - /// - /// Экспорт платежных документов - /// - /// Идентификатор платежного документа - /// Токен отмены - /// Платежные документы + /// public async Task> ExportPaymentDocumentDataByPaymentDocumentIDAsync(string paymentDocumentID, CancellationToken token = default) { var request = new ExportPaymentDocumentDataRequest(client); return await request.ExecuteByPaymentDocumentIDAsync(paymentDocumentID, token); } - /// - /// Экспорт платежных документов - /// - /// Год - /// Месяц - /// Глобальный уникальный идентификатор дома по ФИАС - /// Номер лицевого счета/иной идентификатор плательщика - /// Токен отмены - /// Платежные документы + /// public async Task> ExportPaymentDocumentDataByAccountNumberAsync(short year, int month, string fiasHouseGuid, string accountNumber, CancellationToken token = default) { var request = new ExportPaymentDocumentDataRequest(client); return await request.ExecuteByAccountNumberAsync(year, month, fiasHouseGuid, accountNumber, token); } - /// - /// Экспорт платежных документов - /// - /// Год - /// Месяц - /// Глобальный уникальный идентификатор дома по ФИАС - /// Номер платежного документа, по которому внесена плата, - /// присвоенный такому документу исполнителем в целях осуществления расчетов по внесению платы - /// Токен отмены - /// Платежные документы + /// public async Task> ExportPaymentDocumentDataByPaymentDocumentNumberAsync(short year, int month, string fiasHouseGuid, string paymentDocumentNumber, CancellationToken token = default) { var request = new ExportPaymentDocumentDataRequest(client); return await request.ExecuteByPaymentDocumentNumberAsync(year, month, fiasHouseGuid, paymentDocumentNumber, token); } - /// - /// Импорт сведений о платежных документах - /// - /// Пейлоад сведений о платежных документах - /// Токен отмены - /// true, если операция выполнена успешно, иначе - false + /// public async Task ImportPaymentDocumentDataAsync(ImportPaymentDocumentDataPayload payload, CancellationToken token = default) { var request = new ImportPaymentDocumentDataRequest(client); diff --git a/Hcs.Broker/Api/DeviceMeteringApi.cs b/Hcs.Broker/Api/DeviceMeteringApi.cs index f254616..68ce4f2 100644 --- a/Hcs.Broker/Api/DeviceMeteringApi.cs +++ b/Hcs.Broker/Api/DeviceMeteringApi.cs @@ -4,27 +4,17 @@ using Hcs.Service.Async.DeviceMetering; namespace Hcs.Broker.Api { - // http://open-gkh.ru/DeviceMeteringServiceAsync/ - public class DeviceMeteringApi(Client client) : ApiBase(client) + /// + public class DeviceMeteringApi(Client client) : ApiBase(client), IDeviceMeteringApi { - /// - /// Экспорт истории показаний и поверок приборов учета пользователя, установленных в указанном доме - /// - /// Пейлоад выборки ПУ - /// Токен отмены - /// Лицевые счета + /// public async Task> ExportMeteringDeviceHistoryAsync(ExportMeteringDeviceHistoryPayload payload, CancellationToken token = default) { var request = new ExportMeteringDeviceHistoryRequest(client); return await request.ExecuteAsync(payload, token); } - /// - /// Импорт показаний приборов учета - /// - /// Показания прибора учета - /// Токен отмены - /// true, если операция выполнена успешно, иначе - false + /// public async Task ImportMeteringDeviceValuesAsync(importMeteringDeviceValuesRequestMeteringDevicesValues values, CancellationToken token = default) { var request = new ImportMeteringDeviceValuesRequest(client); diff --git a/Hcs.Broker/Api/HouseManagementApi.cs b/Hcs.Broker/Api/HouseManagementApi.cs index 51510ed..8af1869 100644 --- a/Hcs.Broker/Api/HouseManagementApi.cs +++ b/Hcs.Broker/Api/HouseManagementApi.cs @@ -4,158 +4,94 @@ using Hcs.Service.Async.HouseManagement; namespace Hcs.Broker.Api { - // http://open-gkh.ru/HouseManagementServiceAsync/ - public class HouseManagementApi(Client client) : ApiBase(client) + /// + public class HouseManagementApi(Client client) : ApiBase(client), IHouseManagementApi { - /// - /// Экспорт лицевых счетов - /// - /// Глобальный уникальный идентификатор дома по ФИАС - /// Токен отмены - /// Лицевые счета + /// public async Task> ExportAccountAsync(string fiasHouseGuid, CancellationToken token = default) { var request = new ExportAccountRequest(client); return await request.ExecuteAsync(fiasHouseGuid, token); } - /// - /// Возвращает информацию о доме - /// - /// Глобальный уникальный идентификатор дома по ФИАС - /// Токен отмены - /// Информация о доме + /// public async Task> ExportHouseAsync(string fiasHouseGuid, CancellationToken token = default) { var request = new ExportHouseRequest(client); return await request.ExecuteAsync(fiasHouseGuid, token); } - /// - /// Возвращает все договора ресурсоснабжения - /// - /// Токен отмены - /// Договора ресурсоснабжения + /// public async Task> ExportSupplyResourceContractDataAsync(CancellationToken token = default) { var request = new ExportSupplyResourceContractDataRequest(client); return await request.ExecuteAsync(token); } - /// - /// Возвращает договор ресурсоснабжения по его идентификатору в ГИС ЖКХ - /// - /// Идентификатор договора ресурсоснабжения в ГИС ЖКХ - /// Токен отмены - /// Договор ресурсоснабжения + /// public async Task ExportSupplyResourceContractDataAsync(Guid contractRootGuid, CancellationToken token = default) { var request = new ExportSupplyResourceContractDataRequest(client); return await request.ExecuteAsync(contractRootGuid, token); } - /// - /// Возвращает договор ресурсоснабжения по номеру договора в ГИС ЖКХ - /// - /// Номер договора ресурсоснабжения в ГИС ЖКХ - /// Токен отмены - /// Договор ресурсоснабжения + /// public async Task ExportSupplyResourceContractDataAsync(string contractNumber, CancellationToken token = default) { var request = new ExportSupplyResourceContractDataRequest(client); return await request.ExecuteAsync(contractNumber, token); } - /// - /// Возвращает объекты жилищного фонда из договора ресурсоснабжения по его идентификатору - /// - /// Идентификатор договора ресурсоснабжения в ГИС ЖКХ - /// Токен отмены - /// Объекты жилищного фонда + /// public async Task> ExportSupplyResourceContractObjectAddressDataAsync(Guid contractRootGuid, CancellationToken token = default) { var request = new ExportSupplyResourceContractObjectAddressDataRequest(client); return await request.ExecuteAsync(contractRootGuid, token); } - /// - /// Импорт лицевого счета - /// - /// Пейлоад лицевого счета - /// Токен отмены - /// true, если операция выполнена успешно, иначе - false + /// public async Task ImportAccountDataAsync(ImportAccountDataPayload payload, CancellationToken token = default) { var request = new ImportAccountDataRequest(client); return await request.ExecuteAsync(payload, token); } - /// - /// Импорт сведений о ДУ (создание ДУ) - /// - /// Пейлоад ДУ - /// Токен отмены - /// Импортированный договор + /// public async Task ImportContractDataAsync(ImportContractDataPayload payload, CancellationToken token = default) { var request = new ImportContractDataRequest(client); return await request.ExecuteAsync(payload, token); } - /// - /// Импорт данных дома - /// - /// Пейлоад данных дома - /// Токен отмены - /// true, если операция выполнена успешно, иначе - false + /// public async Task ImportHouseUODataAsync(ImportLivingHouseUODataPayload payload, CancellationToken token = default) { var request = new ImportHouseUODataRequest(client); return await request.ExecuteAsync(payload, token); } - /// - /// Импорт прибора учета - /// - /// Прибор учета - /// Токен отмены - /// true, если операция выполнена успешно, иначе - false + /// public async Task ImportMeteringDeviceDataAsync(MeteringDeviceFullInformationType meteringDevice, CancellationToken token = default) { var request = new ImportMeteringDeviceDataRequest(client); return await request.ExecuteAsync(meteringDevice, token); } - /// - /// Импорт новости для информирования граждан - /// - /// Пейлоад новости - /// Токен отмены - /// true, если операция выполнена успешно, иначе - false + /// public async Task ImportNotificationDataAsync(ImportNotificationDataPayload payload, CancellationToken token = default) { var request = new ImportNotificationDataRequest(client); return await request.ExecuteAsync(payload, token); } - /// - /// Импорт договора ресурсоснабжения с РСО - /// - /// Пейлоад договора ресурсоснабжения - /// Токен отмены - /// Импортированный договор + /// public async Task ImportSupplyResourceContractDataAsync(ImportSupplyResourceContractDataPayload payload, CancellationToken token = default) { var request = new ImportSupplyResourceContractDataRequest(client); return await request.ExecuteAsync(payload, token); } - /// - /// Импорт проекта договора ресурсоснабжения с РСО - /// - /// Пейлоад проекта договора ресурсоснабжения - /// Токен отмены - /// Импортированный проект договора + /// public async Task ImportSupplyResourceContractProjectAsync(ImportSupplyResourceContractProjectPayload payload, CancellationToken token = default) { var request = new ImportSupplyResourceContractProjectRequest(client); diff --git a/Hcs.Broker/Api/IBillsApi.cs b/Hcs.Broker/Api/IBillsApi.cs new file mode 100644 index 0000000..6961236 --- /dev/null +++ b/Hcs.Broker/Api/IBillsApi.cs @@ -0,0 +1,48 @@ +using Hcs.Broker.Api.Payload.Bills; +using Hcs.Service.Async.Bills; + +namespace Hcs.Broker.Api +{ + // http://open-gkh.ru/BillsServiceAsync/ + public interface IBillsApi + { + /// + /// Экспорт платежных документов + /// + /// Идентификатор платежного документа + /// Токен отмены + /// Платежные документы + Task> ExportPaymentDocumentDataByPaymentDocumentIDAsync(string paymentDocumentID, CancellationToken token = default); + + /// + /// Экспорт платежных документов + /// + /// Год + /// Месяц + /// Глобальный уникальный идентификатор дома по ФИАС + /// Номер лицевого счета/иной идентификатор плательщика + /// Токен отмены + /// Платежные документы + Task> ExportPaymentDocumentDataByAccountNumberAsync(short year, int month, string fiasHouseGuid, string accountNumber, CancellationToken token = default); + + /// + /// Экспорт платежных документов + /// + /// Год + /// Месяц + /// Глобальный уникальный идентификатор дома по ФИАС + /// Номер платежного документа, по которому внесена плата, + /// присвоенный такому документу исполнителем в целях осуществления расчетов по внесению платы + /// Токен отмены + /// Платежные документы + Task> ExportPaymentDocumentDataByPaymentDocumentNumberAsync(short year, int month, string fiasHouseGuid, string paymentDocumentNumber, CancellationToken token = default); + + /// + /// Импорт сведений о платежных документах + /// + /// Пейлоад сведений о платежных документах + /// Токен отмены + /// true, если операция выполнена успешно, иначе - false + Task ImportPaymentDocumentDataAsync(ImportPaymentDocumentDataPayload payload, CancellationToken token = default); + } +} diff --git a/Hcs.Broker/Api/IDeviceMeteringApi.cs b/Hcs.Broker/Api/IDeviceMeteringApi.cs new file mode 100644 index 0000000..d84e4ad --- /dev/null +++ b/Hcs.Broker/Api/IDeviceMeteringApi.cs @@ -0,0 +1,25 @@ +using Hcs.Broker.Api.Payload.DeviceMetering; +using Hcs.Service.Async.DeviceMetering; + +namespace Hcs.Broker.Api +{ + // http://open-gkh.ru/DeviceMeteringServiceAsync/ + public interface IDeviceMeteringApi + { + /// + /// Экспорт истории показаний и поверок приборов учета пользователя, установленных в указанном доме + /// + /// Пейлоад выборки ПУ + /// Токен отмены + /// Лицевые счета + Task> ExportMeteringDeviceHistoryAsync(ExportMeteringDeviceHistoryPayload payload, CancellationToken token = default); + + /// + /// Импорт показаний приборов учета + /// + /// Показания прибора учета + /// Токен отмены + /// true, если операция выполнена успешно, иначе - false + Task ImportMeteringDeviceValuesAsync(importMeteringDeviceValuesRequestMeteringDevicesValues values, CancellationToken token = default); + } +} diff --git a/Hcs.Broker/Api/IHouseManagementApi.cs b/Hcs.Broker/Api/IHouseManagementApi.cs new file mode 100644 index 0000000..31652ce --- /dev/null +++ b/Hcs.Broker/Api/IHouseManagementApi.cs @@ -0,0 +1,112 @@ +using Hcs.Broker.Api.Payload.HouseManagement; +using Hcs.Service.Async.HouseManagement; + +namespace Hcs.Broker.Api +{ + // http://open-gkh.ru/HouseManagementServiceAsync/ + public interface IHouseManagementApi + { + /// + /// Экспорт лицевых счетов + /// + /// Глобальный уникальный идентификатор дома по ФИАС + /// Токен отмены + /// Лицевые счета + Task> ExportAccountAsync(string fiasHouseGuid, CancellationToken token = default); + + /// + /// Возвращает информацию о доме + /// + /// Глобальный уникальный идентификатор дома по ФИАС + /// Токен отмены + /// Информация о доме + Task> ExportHouseAsync(string fiasHouseGuid, CancellationToken token = default); + + /// + /// Возвращает все договора ресурсоснабжения + /// + /// Токен отмены + /// Договора ресурсоснабжения + Task> ExportSupplyResourceContractDataAsync(CancellationToken token = default); + + /// + /// Возвращает договор ресурсоснабжения по его идентификатору в ГИС ЖКХ + /// + /// Идентификатор договора ресурсоснабжения в ГИС ЖКХ + /// Токен отмены + /// Договор ресурсоснабжения + Task ExportSupplyResourceContractDataAsync(Guid contractRootGuid, CancellationToken token = default); + + /// + /// Возвращает договор ресурсоснабжения по номеру договора в ГИС ЖКХ + /// + /// Номер договора ресурсоснабжения в ГИС ЖКХ + /// Токен отмены + /// Договор ресурсоснабжения + Task ExportSupplyResourceContractDataAsync(string contractNumber, CancellationToken token = default); + + /// + /// Возвращает объекты жилищного фонда из договора ресурсоснабжения по его идентификатору + /// + /// Идентификатор договора ресурсоснабжения в ГИС ЖКХ + /// Токен отмены + /// Объекты жилищного фонда + Task> ExportSupplyResourceContractObjectAddressDataAsync(Guid contractRootGuid, CancellationToken token = default); + + /// + /// Импорт лицевого счета + /// + /// Пейлоад лицевого счета + /// Токен отмены + /// true, если операция выполнена успешно, иначе - false + Task ImportAccountDataAsync(ImportAccountDataPayload payload, CancellationToken token = default); + + /// + /// Импорт сведений о ДУ (создание ДУ) + /// + /// Пейлоад ДУ + /// Токен отмены + /// Импортированный договор + Task ImportContractDataAsync(ImportContractDataPayload payload, CancellationToken token = default); + + /// + /// Импорт данных дома + /// + /// Пейлоад данных дома + /// Токен отмены + /// true, если операция выполнена успешно, иначе - false + Task ImportHouseUODataAsync(ImportLivingHouseUODataPayload payload, CancellationToken token = default); + + /// + /// Импорт прибора учета + /// + /// Прибор учета + /// Токен отмены + /// true, если операция выполнена успешно, иначе - false + Task ImportMeteringDeviceDataAsync(MeteringDeviceFullInformationType meteringDevice, CancellationToken token = default); + + /// + /// Импорт новости для информирования граждан + /// + /// Пейлоад новости + /// Токен отмены + /// true, если операция выполнена успешно, иначе - false + Task ImportNotificationDataAsync(ImportNotificationDataPayload payload, CancellationToken token = default); + + /// + /// Импорт договора ресурсоснабжения с РСО + /// + /// Пейлоад договора ресурсоснабжения + /// Токен отмены + /// Импортированный договор + Task ImportSupplyResourceContractDataAsync(ImportSupplyResourceContractDataPayload payload, CancellationToken token = default); + + /// + /// Импорт проекта договора ресурсоснабжения с РСО + /// + /// Пейлоад проекта договора ресурсоснабжения + /// Токен отмены + /// Импортированный проект договора + Task ImportSupplyResourceContractProjectAsync(ImportSupplyResourceContractProjectPayload payload, CancellationToken token = default); + } +} diff --git a/Hcs.Broker/Api/INsiApi.cs b/Hcs.Broker/Api/INsiApi.cs new file mode 100644 index 0000000..14c8169 --- /dev/null +++ b/Hcs.Broker/Api/INsiApi.cs @@ -0,0 +1,16 @@ +using Hcs.Service.Async.Nsi; + +namespace Hcs.Broker.Api +{ + // http://open-gkh.ru/NsiService/ + public interface INsiApi + { + /// + /// Возвращает данные справочника поставщика информации + /// + /// Реестровый номер справочника + /// Токен отмены + /// Данные справочника + Task> ExportDataProviderNsiItemAsync(exportDataProviderNsiItemRequestRegistryNumber registryNumber, CancellationToken token = default); + } +} diff --git a/Hcs.Broker/Api/INsiCommonApi.cs b/Hcs.Broker/Api/INsiCommonApi.cs new file mode 100644 index 0000000..942420f --- /dev/null +++ b/Hcs.Broker/Api/INsiCommonApi.cs @@ -0,0 +1,25 @@ +using Hcs.Service.Async.NsiCommon; + +namespace Hcs.Broker.Api +{ + // http://open-gkh.ru/NsiCommonService/ + public interface INsiCommonApi + { + /// + /// Возвращает данные общесистемного справочника + /// + /// Реестровый номер справочника + /// Группа справочников, где NSI - общесистемный, а NSIRAO - ОЖФ + /// Токен отмены + /// Данные общесистемного справочника + Task ExportNsiItemAsync(int registryNumber, ListGroup listGroup, CancellationToken token = default); + + /// + /// Возвращает перечень общесистемных справочников с указанием даты последнего изменения каждого из них + /// + /// Группа справочников, где NSI - общесистемный, а NSIRAO - ОЖФ + /// Токен отмены + /// Перечень общесистемных справочников + Task ExportNsiListAsync(ListGroup listGroup, CancellationToken token = default); + } +} diff --git a/Hcs.Broker/Api/IOrgRegistryCommonApi.cs b/Hcs.Broker/Api/IOrgRegistryCommonApi.cs new file mode 100644 index 0000000..16a907e --- /dev/null +++ b/Hcs.Broker/Api/IOrgRegistryCommonApi.cs @@ -0,0 +1,25 @@ +using Hcs.Service.Async.OrgRegistryCommon; + +namespace Hcs.Broker.Api +{ + // http://open-gkh.ru/OrganizationsRegistryCommonAsyncService/ + public interface IOrgRegistryCommonApi + { + /// + /// Экспорт сведений о поставщиках информации ИС + /// + /// Выгрузить только активных поставщиков данных + /// Токен отмены + /// Сведения о поставщиках данных + Task> ExportDataProviderAsync(bool isActual, CancellationToken token = default); + + /// + /// Экспорт сведений из реестра организаций + /// + /// ОГРН + /// КПП + /// Токен отмены + /// Сведения из реестра организаций + Task> ExportOrgRegistryAsync(string ogrn, string kpp, CancellationToken token = default); + } +} diff --git a/Hcs.Broker/Api/IPaymentsApi.cs b/Hcs.Broker/Api/IPaymentsApi.cs new file mode 100644 index 0000000..5b2fa9f --- /dev/null +++ b/Hcs.Broker/Api/IPaymentsApi.cs @@ -0,0 +1,24 @@ +using Hcs.Broker.Api.Payload.Payments; + +namespace Hcs.Broker.Api +{ + // http://open-gkh.ru/PaymentsServiceAsync/ + public interface IPaymentsApi + { + /// + /// ВИ_ОПЛАТА_ИЗВ. Передать перечень документов "Извещение о принятии к исполнению распоряжения". + /// + /// Пейлоад документа + /// Токен отмены + /// true, если операция выполнена успешно, иначе - false + Task ImportNotificationsOfOrderExecutionAsync(ImportNotificationsOfOrderExecutionPayload payload, CancellationToken token = default); + + /// + /// Импорт пакета документов "Извещение о принятии к исполнению распоряжения", размещаемых исполнителем + /// + /// Пейлоад документа + /// Токен отмены + /// true, если операция выполнена успешно, иначе - false + Task ImportSupplierNotificationsOfOrderExecutionAsync(ImportSupplierNotificationsOfOrderExecutionPayload payload, CancellationToken token = default); + } +} diff --git a/Hcs.Broker/Api/NsiApi.cs b/Hcs.Broker/Api/NsiApi.cs index 38adde4..c0372e7 100644 --- a/Hcs.Broker/Api/NsiApi.cs +++ b/Hcs.Broker/Api/NsiApi.cs @@ -4,15 +4,10 @@ using Hcs.Service.Async.Nsi; namespace Hcs.Broker.Api { - // http://open-gkh.ru/NsiService/ - public class NsiApi(Client client) : ApiBase(client) + /// + public class NsiApi(Client client) : ApiBase(client), INsiApi { - /// - /// Возвращает данные справочника поставщика информации - /// - /// Реестровый номер справочника - /// Токен отмены - /// Данные справочника + /// public async Task> ExportDataProviderNsiItemAsync(exportDataProviderNsiItemRequestRegistryNumber registryNumber, CancellationToken token = default) { try diff --git a/Hcs.Broker/Api/NsiCommonApi.cs b/Hcs.Broker/Api/NsiCommonApi.cs index 9467e1c..10178c2 100644 --- a/Hcs.Broker/Api/NsiCommonApi.cs +++ b/Hcs.Broker/Api/NsiCommonApi.cs @@ -4,16 +4,10 @@ using Hcs.Service.Async.NsiCommon; namespace Hcs.Broker.Api { - // http://open-gkh.ru/NsiCommonService/ - public class NsiCommonApi(Client client) : ApiBase(client) + /// + public class NsiCommonApi(Client client) : ApiBase(client), INsiCommonApi { - /// - /// Возвращает данные общесистемного справочника - /// - /// Реестровый номер справочника - /// Группа справочников, где NSI - общесистемный, а NSIRAO - ОЖФ - /// Токен отмены - /// Данные общесистемного справочника + /// public async Task ExportNsiItemAsync(int registryNumber, ListGroup listGroup, CancellationToken token = default) { try @@ -27,12 +21,7 @@ namespace Hcs.Broker.Api } } - /// - /// Возвращает перечень общесистемных справочников с указанием даты последнего изменения каждого из них - /// - /// Группа справочников, где NSI - общесистемный, а NSIRAO - ОЖФ - /// Токен отмены - /// Перечень общесистемных справочников + /// public async Task ExportNsiListAsync(ListGroup listGroup, CancellationToken token = default) { try diff --git a/Hcs.Broker/Api/OrgRegistryCommonApi.cs b/Hcs.Broker/Api/OrgRegistryCommonApi.cs index cb90011..313b542 100644 --- a/Hcs.Broker/Api/OrgRegistryCommonApi.cs +++ b/Hcs.Broker/Api/OrgRegistryCommonApi.cs @@ -4,15 +4,10 @@ using Hcs.Service.Async.OrgRegistryCommon; namespace Hcs.Broker.Api { - // http://open-gkh.ru/OrganizationsRegistryCommonAsyncService/ - public class OrgRegistryCommonApi(Client client) : ApiBase(client) + /// + public class OrgRegistryCommonApi(Client client) : ApiBase(client), IOrgRegistryCommonApi { - /// - /// Экспорт сведений о поставщиках информации ИС - /// - /// Выгрузить только активных поставщиков данных - /// Токен отмены - /// Сведения о поставщиках данных + /// public async Task> ExportDataProviderAsync(bool isActual, CancellationToken token = default) { try @@ -26,13 +21,7 @@ namespace Hcs.Broker.Api } } - /// - /// Экспорт сведений из реестра организаций - /// - /// ОГРН - /// КПП - /// Токен отмены - /// Сведения из реестра организаций + /// public async Task> ExportOrgRegistryAsync(string ogrn, string kpp, CancellationToken token = default) { try diff --git a/Hcs.Broker/Api/PaymentsApi.cs b/Hcs.Broker/Api/PaymentsApi.cs index ca3be31..74b6902 100644 --- a/Hcs.Broker/Api/PaymentsApi.cs +++ b/Hcs.Broker/Api/PaymentsApi.cs @@ -3,27 +3,17 @@ using Hcs.Broker.Api.Request.Payments; namespace Hcs.Broker.Api { - // http://open-gkh.ru/PaymentsServiceAsync/ - public class PaymentsApi(Client client) : ApiBase(client) + /// + public class PaymentsApi(Client client) : ApiBase(client), IPaymentsApi { - /// - /// ВИ_ОПЛАТА_ИЗВ. Передать перечень документов "Извещение о принятии к исполнению распоряжения". - /// - /// Пейлоад документа - /// Токен отмены - /// true, если операция выполнена успешно, иначе - false + /// public async Task ImportNotificationsOfOrderExecutionAsync(ImportNotificationsOfOrderExecutionPayload payload, CancellationToken token = default) { var request = new ImportNotificationsOfOrderExecutionRequest(client); return await request.ExecuteAsync(payload, token); } - /// - /// Импорт пакета документов "Извещение о принятии к исполнению распоряжения", размещаемых исполнителем - /// - /// Пейлоад документа - /// Токен отмены - /// true, если операция выполнена успешно, иначе - false + /// public async Task ImportSupplierNotificationsOfOrderExecutionAsync(ImportSupplierNotificationsOfOrderExecutionPayload payload, CancellationToken token = default) { var request = new ImportSupplierNotificationsOfOrderExecutionRequest(client); diff --git a/Hcs.Broker/Client.cs b/Hcs.Broker/Client.cs index b17412e..27a0be1 100644 --- a/Hcs.Broker/Client.cs +++ b/Hcs.Broker/Client.cs @@ -8,60 +8,43 @@ using System.Security.Cryptography.X509Certificates; namespace Hcs.Broker { - /// - /// Клиент для вызова всех реализованных функций интеграции с ГИС ЖКХ - /// - public class Client + /// + public class Client : IClient { - /// - /// Идентификатор поставщика данных ГИС ЖКХ - /// + /// public string OrgPPAGUID { get; set; } - /// - /// Исполнитель/сотрудник ГИС ЖКХ, от которого будут регистрироваться ответы - /// + /// public string ExecutorGUID { get; set; } - /// - /// Признак, указывающий на то, что используется ли внешний туннель (stunnel) - /// + /// public bool UseTunnel { get; set; } - /// - /// Если true, то запросы будут выполняться на промышленном стенде, иначе - на тестовом - /// + /// public bool IsPPAK { get; set; } - /// - /// Роль - /// + /// public OrganizationRole Role { get; set; } - /// - /// Устанавливаемый пользователем приемник отладочных сообщений - /// + /// public ILogger Logger { get; set; } - /// - /// Устанавливаемый пользователем механизм перехвата содержимого отправляемых - /// и принимаемых пакетов - /// + /// public IMessageCapturer MessageCapturer { get; set; } - public BillsApi Bills => new(this); + public IBillsApi Bills => new BillsApi(this); - public DeviceMeteringApi DeviceMetering => new(this); + public IDeviceMeteringApi DeviceMetering => new DeviceMeteringApi(this); - public HouseManagementApi HouseManagement => new(this); + public IHouseManagementApi HouseManagement => new HouseManagementApi(this); - public NsiApi Nsi => new(this); + public INsiApi Nsi => new NsiApi(this); - public NsiCommonApi NsiCommon => new(this); + public INsiCommonApi NsiCommon => new NsiCommonApi(this); - public OrgRegistryCommonApi OrgRegistryCommon => new(this); + public IOrgRegistryCommonApi OrgRegistryCommon => new OrgRegistryCommonApi(this); - public PaymentsApi Payments => new(this); + public IPaymentsApi Payments => new PaymentsApi(this); /// /// Сертификат клиента для применения при формировании запросов diff --git a/Hcs.Broker/IClient.cs b/Hcs.Broker/IClient.cs new file mode 100644 index 0000000..a860177 --- /dev/null +++ b/Hcs.Broker/IClient.cs @@ -0,0 +1,64 @@ +using Hcs.Broker.Api; +using Hcs.Broker.Logger; +using Hcs.Broker.MessageCapturer; + +namespace Hcs.Broker +{ + /// + /// Клиент для вызова всех реализованных функций интеграции с ГИС ЖКХ + /// + public interface IClient + { + /// + /// Идентификатор поставщика данных ГИС ЖКХ + /// + string OrgPPAGUID { get; set; } + + /// + /// Исполнитель/сотрудник ГИС ЖКХ, от которого будут регистрироваться ответы + /// + string ExecutorGUID { get; set; } + + /// + /// Признак, указывающий на то, что используется ли внешний туннель (stunnel) + /// + bool UseTunnel { get; set; } + + /// + /// Если true, то запросы будут выполняться на промышленном стенде, иначе - на тестовом + /// + bool IsPPAK { get; set; } + + /// + /// Роль + /// + OrganizationRole Role { get; set; } + + /// + /// Устанавливаемый пользователем приемник отладочных сообщений + /// + ILogger Logger { get; set; } + + /// + /// Устанавливаемый пользователем механизм перехвата содержимого отправляемых + /// и принимаемых пакетов + /// + IMessageCapturer MessageCapturer { get; set; } + + IBillsApi Bills { get; } + + IDeviceMeteringApi DeviceMetering { get; } + + IHouseManagementApi HouseManagement { get; } + + INsiApi Nsi { get; } + + INsiCommonApi NsiCommon { get; } + + IOrgRegistryCommonApi OrgRegistryCommon { get; } + + IPaymentsApi Payments { get; } + + void SetSigningCertificate(string serialNumber, string? pin = null); + } +} diff --git a/Hcs.WebApp/Components/Pages/Test/Export.razor b/Hcs.WebApp/Components/Pages/Test/Export.razor index 2f4019e..d383f7b 100644 --- a/Hcs.WebApp/Components/Pages/Test/Export.razor +++ b/Hcs.WebApp/Components/Pages/Test/Export.razor @@ -5,6 +5,7 @@ @using Hcs.Broker.MessageCapturer @using Hcs.Service.Async.Nsi @using Hcs.WebApp.Config +@using Hcs.WebApp.Services @using Hcs.WebApp.Utils @using Microsoft.AspNetCore.Authorization @@ -14,6 +15,7 @@ @inject NavigationManager NavigationManager @inject IConfiguration Configuration +@inject IClientProvider ClientProvider Тестирование экспорта @@ -59,7 +61,7 @@ string messageBody; string responseBody; - Client client; + IClient client; ActionLogger logger = new ActionLogger(); FileMessageCapturer messageCapturer; bool catchMessageBody; @@ -73,19 +75,8 @@ messageCapturer = new FileMessageCapturer("test/export", logger); messageCapturer.OnFileWritten += OnFileWritten; - var brokerConfig = Configuration.GetSection("BrokerConfig").Get(); - client = new Client - { - OrgPPAGUID = brokerConfig.OrgPPAGUID, - ExecutorGUID = brokerConfig.ExecutorGUID, - UseTunnel = false, - IsPPAK = false, - Role = OrganizationRole.RSO, - Logger = logger, - MessageCapturer = messageCapturer - }; - - client.SetSigningCertificate(brokerConfig.CertificateSerialNumber); + var config = Configuration.GetSection("BrokerConfig").Get(); + client = ClientProvider.CreateClient(config, logger, messageCapturer); } public void Dispose() diff --git a/Hcs.WebApp/Hcs.WebApp.csproj b/Hcs.WebApp/Hcs.WebApp.csproj index c063d08..3ae1000 100644 --- a/Hcs.WebApp/Hcs.WebApp.csproj +++ b/Hcs.WebApp/Hcs.WebApp.csproj @@ -6,6 +6,10 @@ enable + + $(DefineConstants);USE_MOCK + + @@ -25,6 +29,7 @@ + diff --git a/Hcs.WebApp/Program.cs b/Hcs.WebApp/Program.cs index 78de197..513086e 100644 --- a/Hcs.WebApp/Program.cs +++ b/Hcs.WebApp/Program.cs @@ -1,5 +1,6 @@ using Hcs.WebApp.Components; using Hcs.WebApp.Data; +using Hcs.WebApp.Services; using Microsoft.AspNetCore.Identity; using Microsoft.EntityFrameworkCore; using Radzen; @@ -34,6 +35,12 @@ builder.Services .AddEntityFrameworkStores() .AddDefaultTokenProviders(); +#if USE_MOCK +builder.Services.AddTransient(); +#else +builder.Services.AddTransient(); +#endif + var app = builder.Build(); if (!app.Environment.IsDevelopment()) diff --git a/Hcs.WebApp/Services/ClientProvider.cs b/Hcs.WebApp/Services/ClientProvider.cs new file mode 100644 index 0000000..d9010f1 --- /dev/null +++ b/Hcs.WebApp/Services/ClientProvider.cs @@ -0,0 +1,27 @@ +using Hcs.Broker; +using Hcs.Broker.MessageCapturer; +using Hcs.WebApp.Config; + +namespace Hcs.WebApp.Services +{ + public class ClientProvider : IClientProvider + { + public IClient CreateClient(BrokerConfig config, Broker.Logger.ILogger logger, IMessageCapturer messageCapturer) + { + var client = new Client + { + OrgPPAGUID = config.OrgPPAGUID, + ExecutorGUID = config.ExecutorGUID, + UseTunnel = false, + IsPPAK = false, + Role = OrganizationRole.RSO, + Logger = logger, + MessageCapturer = messageCapturer + }; + + client.SetSigningCertificate(config.CertificateSerialNumber); + + return client; + } + } +} diff --git a/Hcs.WebApp/Services/IClientProvider.cs b/Hcs.WebApp/Services/IClientProvider.cs new file mode 100644 index 0000000..3388fc7 --- /dev/null +++ b/Hcs.WebApp/Services/IClientProvider.cs @@ -0,0 +1,11 @@ +using Hcs.Broker; +using Hcs.Broker.MessageCapturer; +using Hcs.WebApp.Config; + +namespace Hcs.WebApp.Services +{ + public interface IClientProvider + { + IClient CreateClient(BrokerConfig config, Broker.Logger.ILogger logger, IMessageCapturer messageCapturer); + } +} diff --git a/Hcs.WebApp/Services/MockClientProvider.cs b/Hcs.WebApp/Services/MockClientProvider.cs new file mode 100644 index 0000000..be2e75f --- /dev/null +++ b/Hcs.WebApp/Services/MockClientProvider.cs @@ -0,0 +1,19 @@ +using Hcs.Broker; +using Hcs.Broker.MessageCapturer; +using Hcs.Broker.Mock; +using Hcs.WebApp.Config; + +namespace Hcs.WebApp.Services +{ + public class MockClientProvider : IClientProvider + { + public IClient CreateClient(BrokerConfig config, Broker.Logger.ILogger logger, IMessageCapturer messageCapturer) + { +#if USE_MOCK + return new MockClient(); +#else + return null; +#endif + } + } +} diff --git a/Hcs.sln b/Hcs.sln index 6cabb44..80b40ae 100644 --- a/Hcs.sln +++ b/Hcs.sln @@ -11,6 +11,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Hcs.WebApp", "Hcs.WebApp\Hc EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Hcs.Broker", "Hcs.Broker\Hcs.Broker.csproj", "{F1A3A447-79C9-4387-88AF-981F5BC3BA88}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Hcs.Broker.Mock", "Hcs.Broker.Mock\Hcs.Broker.Mock.csproj", "{D28CCA2E-10F1-411E-A103-F6BCB4D1BCAF}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -33,6 +35,9 @@ Global {F1A3A447-79C9-4387-88AF-981F5BC3BA88}.Debug|Any CPU.Build.0 = Debug|Any CPU {F1A3A447-79C9-4387-88AF-981F5BC3BA88}.Release|Any CPU.ActiveCfg = Release|Any CPU {F1A3A447-79C9-4387-88AF-981F5BC3BA88}.Release|Any CPU.Build.0 = Release|Any CPU + {D28CCA2E-10F1-411E-A103-F6BCB4D1BCAF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D28CCA2E-10F1-411E-A103-F6BCB4D1BCAF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D28CCA2E-10F1-411E-A103-F6BCB4D1BCAF}.Release|Any CPU.ActiveCfg = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE