diff --git a/LCU.API.Internal.MemberPreferencesApi/Dockerfile b/LCU.API.Internal.MemberPreferencesApi/Dockerfile index 1480b48..326dd00 100644 --- a/LCU.API.Internal.MemberPreferencesApi/Dockerfile +++ b/LCU.API.Internal.MemberPreferencesApi/Dockerfile @@ -29,6 +29,7 @@ RUN dotnet publish ./source/LCU.API.Internal.MemberPreferencesApi/LCU.API.Intern # ASP.NET Core FROM mcr.microsoft.com/dotnet/aspnet:8.0-alpine3.20 RUN apk add --no-cache icu-libs && apk add --no-cache tzdata; +ENV TZ America/Chicago ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=false ENV ASPNETCORE_ENVIRONMENT=Development diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi.IntegrationTests/LCU.API.Internal.MemberPreferencesApi.IntegrationTests.csproj b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi.IntegrationTests/LCU.API.Internal.MemberPreferencesApi.IntegrationTests.csproj index f404962..77d08be 100644 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi.IntegrationTests/LCU.API.Internal.MemberPreferencesApi.IntegrationTests.csproj +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi.IntegrationTests/LCU.API.Internal.MemberPreferencesApi.IntegrationTests.csproj @@ -13,9 +13,8 @@ - - - + + diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi.IntegrationTests/XdiTransferTest.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi.IntegrationTests/XdiBatchItemTest.cs similarity index 78% rename from LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi.IntegrationTests/XdiTransferTest.cs rename to LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi.IntegrationTests/XdiBatchItemTest.cs index 3a2567f..f92d8e3 100644 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi.IntegrationTests/XdiTransferTest.cs +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi.IntegrationTests/XdiBatchItemTest.cs @@ -4,61 +4,42 @@ using Moq; using NUnit.Framework; using LCU.API.Internal.MemberPreferencesApiLib.Repositories; using LCU.API.Internal.MemberPreferencesApi.Services.XdiServices; -using LCU.API.Internal.MemberPreferencesApi.Configuration; using LCU.Library.Internal.MemberPreferencesApiModels.Entities; using LCU.Library.Internal.MemberPreferencesApiModels.Enums; -using LCU.Library.Internal.LcuMassTransitModels; using LCU.API.Internal.MemberPreferencesApi.MicroApiServices; namespace LCU.API.Internal.MemberPreferencesApi.IntegrationTests { - public class XdiTransferTest + public class XdiBatchItemTest { private IXdiBatchService _xdiBatchItemService; private Mock _mockBatchItemsRepository; private Mock _mockUnitOfWork; - private XdiSftpApiConfiguration _xdiSftpConfiguration; - private FtpApiConfiguration _ftpConfiguration; private Mock _mockUnifiedOptinRepository; private Mock _mockMemberPreferenceRepository; - private Mock _mockFtpApiService; - private ConnectionConfiguration _connectionConfiguration; - private ReceiveEndpointConfiguration _completionReceiveEndpoint; - private ReceiveEndpointConfigurations _endpointConfiguration; + private Mock _mockFileOperationsApiService; + private IMock _mockXdiBatchProcessInfoRepository; + [SetUp] public void Setup() { - _mockFtpApiService = new Mock(); - _connectionConfiguration = new ConnectionConfiguration(); - _mockBatchItemsRepository = new Mock(); - _mockMemberPreferenceRepository = new Mock(); - _endpointConfiguration = new ReceiveEndpointConfigurations(); - _completionReceiveEndpoint = _endpointConfiguration.XdiBatchConfirmEndpoint; - _mockUnitOfWork = new Mock(); - _ftpConfiguration = new FtpApiConfiguration() - { - Url = "https://qa-ftpapi.lcu-internal.com/api/" - }; - _xdiSftpConfiguration = new XdiSftpApiConfiguration() - - { - HostName = "sftp.xdi.com", - UserName = "LANDMARKCU", - PortNumber = 22, - Password = "FILLMEIN", - Fingerprint = "ssh-dss 2048 12:78:33:0a:cf:71:21:e2:8b:0e:ef:6a:8a:c6:8e:4f" - }; - + _mockFileOperationsApiService = new Mock(); _mockUnifiedOptinRepository = new Mock(); + _mockBatchItemsRepository = new Mock(); + _mockXdiBatchProcessInfoRepository = new Mock(); + _mockUnitOfWork = new Mock(); + _mockUnifiedOptinRepository = new Mock(); + _mockMemberPreferenceRepository = new Mock(); + _mockFileOperationsApiService = new Mock(); + _xdiBatchItemService = new XdiBatchService(_mockBatchItemsRepository.Object, _mockUnitOfWork.Object, - _xdiSftpConfiguration, _mockUnifiedOptinRepository.Object, _mockMemberPreferenceRepository.Object, - _connectionConfiguration, _endpointConfiguration, _mockFtpApiService.Object); + _mockUnifiedOptinRepository.Object, _mockMemberPreferenceRepository.Object, + _mockFileOperationsApiService.Object, _mockXdiBatchProcessInfoRepository.Object); } - - [Ignore("This will actually create the items and FTP them to XDI Test Folder. Be Careful. Fill in password.")] - public void Test_Send_Test_Files() + [Test] + public void Test_XdiBatchItem_Setup() { IReadOnlyCollection items = new List() { diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi.UnitTests/LCU.API.Internal.MemberPreferencesApi.UnitTests.csproj b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi.UnitTests/LCU.API.Internal.MemberPreferencesApi.UnitTests.csproj index a1d18c4..afbb660 100644 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi.UnitTests/LCU.API.Internal.MemberPreferencesApi.UnitTests.csproj +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi.UnitTests/LCU.API.Internal.MemberPreferencesApi.UnitTests.csproj @@ -1,4 +1,4 @@ - + net8.0 @@ -9,11 +9,11 @@ - + - - + + diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi.UnitTests/Services/DNADataAuditProcessServiceTest.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi.UnitTests/Services/DNADataAuditProcessServiceTest.cs index e1c7738..436b30e 100644 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi.UnitTests/Services/DNADataAuditProcessServiceTest.cs +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi.UnitTests/Services/DNADataAuditProcessServiceTest.cs @@ -1,130 +1,35 @@ +using LCU.API.Internal.MemberPreferencesApi.Interfaces; +using LCU.API.Internal.MemberPreferencesApi.MicroApiServices; +using LCU.API.Internal.MemberPreferencesApi.Services.DnaAuditServices; +using LCU.API.Internal.MemberPreferencesApiLib.Repositories; +using LCU.Library.Internal.LCUServiceFactory.Services; using Moq; using NUnit.Framework; -using System; -using System.Collections.Generic; -using System.Threading.Tasks; -using System.Linq; -using LCU.Library.Internal.MemberPreferencesApiModels.Entities; -using LCU.Library.Internal.MemberPreferencesApiModels.Enums; -using LCU.API.Internal.MemberPreferencesApi.Services.QueueServices; -using LCU.API.Internal.MemberPreferencesApi.Interfaces; -using LCU.API.Internal.MemberPreferencesApi.Configuration; -using LCU.API.Internal.MemberPreferencesApiLib.Repositories; -using LCU.API.Internal.MemberPreferencesApi.Services.DnaAuditServices; -using LCU.API.Internal.MemberPreferencesApi.MicroApiServices; namespace LCU.API.Internal.MemberPreferencesApi.UnitTests.Services { public class DNADataAuditProcessServiceTest { private Mock _coreApiWrapperServiceMock; - private Mock _queueAccountMock; - private Mock _queueAgreementMock; - private Mock _queueOrganizationMock; + private Mock _scanBiCoreApiWrapperServiceMock; private Mock _dnaAuditProcessRepositoryMock; private DNADataAuditProcessService _service; private Mock _dateTimeMock; - private DnaAuditProcessConfiguration _config; + private Mock> _serviceFactoryMock; [SetUp] public void Setup() { _dateTimeMock = new Mock(); - _config = new DnaAuditProcessConfiguration(); _coreApiWrapperServiceMock = new Mock(); - _queueAccountMock = new Mock(); - _queueAgreementMock = new Mock(); - _queueOrganizationMock = new Mock(); + _scanBiCoreApiWrapperServiceMock = new Mock(); _dnaAuditProcessRepositoryMock = new Mock(); - _service = new DNADataAuditProcessService(_queueAccountMock.Object, _queueAgreementMock.Object, _queueOrganizationMock.Object, - _coreApiWrapperServiceMock.Object, _dateTimeMock.Object, _dnaAuditProcessRepositoryMock.Object, _config); - } - - [Test] - public async Task RunDnaAuditProcessesChange_HandleProcessUpdate_Ok() - { - - var processlistAccount = new List - { - new DnaAuditProcess() - { - ConsecutiveFailures = 0, - DnaProcessType = DnaAuditProcessType.DNAAccounts, - LastUpdated = DateTime.Now, - ProcessId = 0, - } - }; - - var processlistAgreement = new List - { - new DnaAuditProcess() - { - ConsecutiveFailures = 0, - DnaProcessType = DnaAuditProcessType.DNAAgreement, - LastUpdated = DateTime.Now, - ProcessId = 0, - } - }; - - var processlistOrg = new List - { - new DnaAuditProcess() - { - ConsecutiveFailures = 0, - DnaProcessType = DnaAuditProcessType.DNAOrganization, - LastUpdated = DateTime.Now, - ProcessId = 0, - } - }; - - await _service.RunDataAuditProcesses(); - await _service.AuditDNAAccountsForTimePeriod(DateTime.Now, processlistAccount.First()); - var resultAccount = _service.HandleDnaAuditProcessSuccess(processlistAccount.First()); - - await _service.AuditDNAAgreementForTimePeriod(DateTime.Now, processlistAgreement.First()); - var resultAgreement = _service.HandleDnaAuditProcessSuccess(processlistAgreement.First()); - - await _service.AuditDNAOrganizationForTimePeriod(DateTime.Now, processlistOrg.First()); - var resultOrg = _service.HandleDnaAuditProcessSuccess(processlistOrg.First()); - - //assert - Assert.NotNull(resultAccount); - Assert.AreEqual(resultAccount.DnaProcessType, DnaAuditProcessType.DNAAccounts); - Assert.AreEqual(resultAccount.ConsecutiveFailures, 0); - - Assert.NotNull(resultAgreement); - Assert.AreEqual(resultAgreement.DnaProcessType, DnaAuditProcessType.DNAAgreement); - Assert.AreEqual(resultAgreement.ConsecutiveFailures, 0); - - Assert.NotNull(resultOrg); - Assert.AreEqual(resultOrg.DnaProcessType, DnaAuditProcessType.DNAOrganization); - Assert.AreEqual(resultOrg.ConsecutiveFailures, 0); - } - - [Test] - public async Task RunDnaAuditProcessesChange_HandleProcessUpdateException_Ok() - { - - var processlistAccount = new List - { - new DnaAuditProcess() - { - ConsecutiveFailures = 0, - DnaProcessType = DnaAuditProcessType.DNAAccounts, - LastUpdated = DateTime.Now, - ProcessId = 0, - } - }; - - var ex = new Exception(); - await _service.RunDataAuditProcesses(); - await _service.AuditDNAAccountsForTimePeriod(DateTime.Now, processlistAccount.First()); - var resultAccount = _service.HandleDnaAuditProcessException(processlistAccount.First(), ex); - - //assert - Assert.NotNull(resultAccount); - Assert.AreEqual(resultAccount.DnaProcessType, DnaAuditProcessType.DNAAccounts); - Assert.AreEqual(resultAccount.ConsecutiveFailures, 1); + _serviceFactoryMock = new Mock>(); + _service = new DNADataAuditProcessService(_coreApiWrapperServiceMock.Object, + _scanBiCoreApiWrapperServiceMock.Object, + _dateTimeMock.Object, + _dnaAuditProcessRepositoryMock.Object, + _serviceFactoryMock.Object); } } } diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi.UnitTests/Services/DNADataAuditServiceTest.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi.UnitTests/Services/DNADataAuditServiceTest.cs deleted file mode 100644 index 2ded22e..0000000 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi.UnitTests/Services/DNADataAuditServiceTest.cs +++ /dev/null @@ -1,223 +0,0 @@ -using Moq; -using NUnit.Framework; -using System; -using System.Collections.Generic; -using System.Threading.Tasks; -using LCU.API.Internal.MemberPreferencesApi.Services; -using LCU.Library.Internal.MemberPreferencesApiModels.Entities; -using LCU.Library.Internal.MemberPreferencesApiModels.Enums; -using LCU.Library.Internal.CoreApiWrapperModel.CoreModels.Agreements; -using LCU.API.Internal.MemberPreferencesApi.Services.DnaAuditServices; -using LCU.API.Internal.MemberPreferencesApi.MicroApiServices; -using LCU.API.Internal.MemberPreferencesApi.Models.Requests; - -namespace LCU.API.Internal.MemberPreferencesApi.UnitTests.Services -{ - public class DNADataAuditServiceTest - { - private Mock _coreApiWrapperServiceMock; - private Mock _optinServiceMock; - private DNADataAuditService _service; - - [SetUp] - public void Setup() - { - _coreApiWrapperServiceMock = new Mock(); - _optinServiceMock = new Mock(); - _service = new DNADataAuditService(_coreApiWrapperServiceMock.Object, _optinServiceMock.Object); - } - - [Test] - public async Task HandleChangedFields_AccountChange_OK_UPDATE() - { - - var account = new AgreementAccount - { - AccountNumber = 123456, - OvrDeliveryMethCD = "PRNT", - AccountOwner = new AgreementAccountOwner - { - AccountNumber = 123456, - AgreementNumber = 222, - PersonNumber = 123, - UserId = "1234" - } - }; - - var memberOptinSettings = new MemberOptInSettings - { - EStatements = null, - UniversalOptIn = "Electronic" - }; - - //setup - _coreApiWrapperServiceMock.Setup(x => x.GetAgreementAccountByAccountId(123456)).ReturnsAsync(account).Verifiable(); - - _optinServiceMock.Setup(x => x.GetMemberOptInSettings("1234")).ReturnsAsync(memberOptinSettings).Verifiable(); - - var request = new DnaFieldChangeRequest() - { - ConsecutiveFailures = 0, - DnaFieldIdInformation = 123456L, - DnaProcessType = DnaAuditProcessType.DNAAgreement, - LastUpdated = DateTime.Now, - ProcessId = 1 - }; - - await _service.HandleAccountAuditCheck(request); - - //assert - _coreApiWrapperServiceMock.Verify(x => x.UpdateAgreementAccountsDeliveryMethod(It.Is>(list => list.Contains(123456)), It.Is(x => x.Equals("WWW")), It.Is(x => x.Equals("1234"))), Times.Once); - _coreApiWrapperServiceMock.Verify(); - _optinServiceMock.Verify(); - } - - [Test] - public async Task HandleChangedFields_AccountChange_OK_DONTUPDATE() - { - var account = new AgreementAccount - { - AccountNumber = 123456, - OvrDeliveryMethCD = "PRNT", - AccountOwner = new AgreementAccountOwner - { - AccountNumber = 123456, - AgreementNumber = 222, - PersonNumber = 123, - UserId = "1234" - } - }; - - var memberOptinSettings = new MemberOptInSettings - { - EStatements = null, - UniversalOptIn = "Paper" - }; - - //setup - _coreApiWrapperServiceMock.Setup(x => x.GetAgreementAccountByAccountId(123456)).ReturnsAsync(account).Verifiable(); - - _optinServiceMock.Setup(x => x.GetMemberOptInSettings("1234")) - .ReturnsAsync(memberOptinSettings).Verifiable(); - - var request = new DnaFieldChangeRequest() - { - ConsecutiveFailures = 0, - DnaFieldIdInformation = 123456L, - DnaProcessType = DnaAuditProcessType.DNAAccounts, - LastUpdated = DateTime.Now, - ProcessId = 1 - }; - - await _service.HandleAccountAuditCheck(request); - - //assert - _coreApiWrapperServiceMock.Verify(x => x.UpdateAgreementAccountsDeliveryMethod(It.IsAny>(), It.IsAny(), It.IsAny()), Times.Never); - _coreApiWrapperServiceMock.Verify(); - _optinServiceMock.Verify(); - } - - [Test] - public async Task HandleChangedFields_AgreementChange_OK_UPDATE() - { - var agreement = new Agreement - { - AgreementNumber = 1127, - PersonNumber = 123, - UserId = "1234" - }; - - var accounts = new List - { - new AgreementAccount{ - AccountNumber = 123456, - OvrDeliveryMethCD = "PRNT", - TaxReportForPersonNumber = 123, - AccountOwner = new AgreementAccountOwner{ - AccountNumber = 123456, - AgreementNumber = 1127, - PersonNumber = 123, - UserId = "1234" - } - } - }; - - var memberOptinSettings = new MemberOptInSettings - { - EStatements = null, - UniversalOptIn = "Electronic" - }; - - //setup - _coreApiWrapperServiceMock.Setup(x => x.GetAgreementByAgreementId(1127)).ReturnsAsync(agreement).Verifiable(); - _coreApiWrapperServiceMock.Setup(x => x.GetAgreementAccountsByUserId("1234")).ReturnsAsync(accounts).Verifiable(); - - _optinServiceMock.Setup(x => x.GetMemberOptInSettings("1234")).ReturnsAsync(memberOptinSettings).Verifiable(); - - var request = new DnaFieldChangeRequest() - { - ConsecutiveFailures = 0, - DnaFieldIdInformation = 1127L, - DnaProcessType = DnaAuditProcessType.DNAAgreement, - LastUpdated = DateTime.Now, - ProcessId = 1 - }; - - await _service.HandleAgreementAuditCheck(request); - - //assert - _coreApiWrapperServiceMock.Verify(x => x.UpdateAgreementAccountsDeliveryMethod(It.Is>(list => list.Contains(123456)), It.Is(x => x.Equals("WWW")), It.Is(x => x.Equals("1234"))), Times.Once); - _coreApiWrapperServiceMock.Verify(); - _optinServiceMock.Verify(); - } - - [Test] - public async Task HandleChangedFields_OrganizationChange_OK_UPDATE() - { - var accounts = new List - { - new AgreementAccount{ - AccountNumber = 123456, - TaxReportForOrgNumber = 11267, - OvrDeliveryMethCD = "PRNT", - AccountOwner = new AgreementAccountOwner - { - AccountNumber = 123456, - AgreementNumber = 222, - PersonNumber = 123, - UserId = "1234" - } - } - }; - - var memberOptinSettings = new MemberOptInSettings - { - EStatements = null, - UniversalOptIn = "Electronic" - }; - - //setup - - _coreApiWrapperServiceMock.Setup(x => x.GetAgreementAccountsByOrganizationId(1126)).ReturnsAsync(accounts).Verifiable(); - - _optinServiceMock.Setup(x => x.GetMemberOptInSettings("1234")).ReturnsAsync(memberOptinSettings).Verifiable(); - - var request = new DnaFieldChangeRequest() - { - ConsecutiveFailures = 0, - DnaFieldIdInformation = 1126L, - DnaProcessType = DnaAuditProcessType.DNAAgreement, - LastUpdated = DateTime.Now, - ProcessId = 1 - }; - - //act - await _service.HandleOrganizationAuditCheck(request); - - //assert - _coreApiWrapperServiceMock.Verify(x => x.UpdateAgreementAccountsDeliveryMethod(It.Is>(list => list.Contains(123456)), It.Is(x => x.Equals("WWW")), It.Is(x => x.Equals("1234"))), Times.Once); - _coreApiWrapperServiceMock.Verify(); - _optinServiceMock.Verify(); - } - } -} diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi.UnitTests/Services/XdiBatchItemServiceTest.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi.UnitTests/Services/XdiBatchItemServiceTest.cs index 4b438fd..2656d3c 100644 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi.UnitTests/Services/XdiBatchItemServiceTest.cs +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi.UnitTests/Services/XdiBatchItemServiceTest.cs @@ -1,48 +1,45 @@ -using System; -using System.Collections.Generic; -using System.Threading.Tasks; -using LCU.API.Internal.MemberPreferencesApi.Configuration; +using LCU.API.Internal.MemberPreferencesApi.MicroApiServices; +using LCU.API.Internal.MemberPreferencesApi.Models; +using LCU.API.Internal.MemberPreferencesApi.Models.Requests; +using LCU.API.Internal.MemberPreferencesApi.Services.XdiServices; +using LCU.API.Internal.MemberPreferencesApiLib.Repositories; +using LCU.Library.Internal.LcuClassPatterns.CrudTests.Tests; +using LCU.Library.Internal.LcuClassPatterns.CrudTests.Utilities; using LCU.Library.Internal.MemberPreferencesApiModels.Entities; using LCU.Library.Internal.MemberPreferencesApiModels.Enums; -using LCU.Library.Internal.LcuMassTransitModels; -using LCU.API.Internal.MemberPreferencesApiLib.Repositories; -using LCU.API.Internal.MemberPreferencesApi.Services.XdiServices; -using LCU.API.Internal.MemberPreferencesApi.MicroApiServices; using Moq; using Newtonsoft.Json; using NUnit.Framework; -using LCU.API.Internal.MemberPreferencesApi.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; namespace LCU.API.Internal.MemberPreferencesApi.UnitTests.Services { - public class XdiBatchItemServiceTest + public class XdiBatchItemServiceTest : CrudServiceTest { private IXdiBatchService _xdiBatchItemService; private Mock _mockBatchItemsRepository; + private Mock _mockXdiBatchProcessInfoRepository; private Mock _mockUnitOfWork; - private XdiSftpApiConfiguration _ftpConfiguration; private Mock _mockUnifiedOptinRepository; private Mock _mockMemberPreferenceRepository; - private Mock _mockFtpApiService; - private ConnectionConfiguration _connectionConfiguration; - private ReceiveEndpointConfiguration _completionReceiveEndpoint; - private ReceiveEndpointConfigurations _endpointConfiguration; + private Mock _mockFileOperationsApiService; [SetUp] public void Setup() { _mockBatchItemsRepository = new Mock(); + _mockXdiBatchProcessInfoRepository = new Mock(); _mockUnitOfWork = new Mock(); - _ftpConfiguration = new XdiSftpApiConfiguration(); _mockUnifiedOptinRepository = new Mock(); _mockMemberPreferenceRepository = new Mock(); - _mockFtpApiService = new Mock(); - _endpointConfiguration = new ReceiveEndpointConfigurations(); - _completionReceiveEndpoint = _endpointConfiguration.XdiBatchConfirmEndpoint; + _mockFileOperationsApiService = new Mock(); _xdiBatchItemService = new XdiBatchService(_mockBatchItemsRepository.Object, _mockUnitOfWork.Object, - _ftpConfiguration, _mockUnifiedOptinRepository.Object, _mockMemberPreferenceRepository.Object, - _connectionConfiguration, _endpointConfiguration, _mockFtpApiService.Object); + _mockUnifiedOptinRepository.Object, _mockMemberPreferenceRepository.Object, + _mockFileOperationsApiService.Object, _mockXdiBatchProcessInfoRepository.Object); } [Test] @@ -226,7 +223,7 @@ namespace LCU.API.Internal.MemberPreferencesApi.UnitTests.Services } [Test] - public async Task CreateFtpQueryPayload_Ok() + public async Task CreateXdiBatchExport_MultipleResults_Ok() { var testFile = new XdiBatchFile { @@ -308,7 +305,26 @@ namespace LCU.API.Internal.MemberPreferencesApi.UnitTests.Services UniversalOptIn = DeliveryPreference.Hold }); - var results = await _xdiBatchItemService.CreateFtpPayload(testFile); + var xdiBatchProcessInfo = new List + { + new() + { + XdiBatchProcessInfoId = (int)typeof(int).GetRandomValue(), + StartTimeStamp = DateTime.Now, + XdiBatchProcessStatus = XdiBatchProcessStatus.InProgress, + ApiResponse = "Started" + } + }; + + var request = new XdiBatchRequest() + { + XdiAppendFileRootBasePath = "test/test" + }; + + _mockXdiBatchProcessInfoRepository.Setup(x => x.FindBatchProcessInfoByStatus(XdiBatchProcessStatus.InProgress)).ReturnsAsync(xdiBatchProcessInfo) + .Verifiable(); + + var results = await _xdiBatchItemService.BuildXdiFiles(testFile, request.XdiAppendFileRootBasePath, xdiBatchProcessInfo.FirstOrDefault()); Assert.AreEqual(4, results.Count); Assert.True(results.Exists(x => x.UserId == "100" && x.Value == "newemail@email.com")); @@ -318,7 +334,7 @@ namespace LCU.API.Internal.MemberPreferencesApi.UnitTests.Services } [Test] - public async Task CreateFtpQueryPayload_No_Result_Ok() + public async Task CreateXdiBatchExport_Result_Ok() { var testFile = new XdiBatchFile { @@ -331,6 +347,17 @@ namespace LCU.API.Internal.MemberPreferencesApi.UnitTests.Services } }; + var xdiBatchProcessInfo = new List + { + new() + { + XdiBatchProcessInfoId = (int)typeof(int).GetRandomValue(), + StartTimeStamp = DateTime.Now, + XdiBatchProcessStatus = XdiBatchProcessStatus.InProgress, + ApiResponse = "Started" + } + }; + _mockUnifiedOptinRepository .Setup(x => x.GetMemberOptInSettingsNoTracking("100")).ReturnsAsync(new MemberOptInSettings { @@ -341,8 +368,16 @@ namespace LCU.API.Internal.MemberPreferencesApi.UnitTests.Services _mockUnifiedOptinRepository .Setup(x => x.GetMemberOptInSettingsNoTracking(It.Is(userId => int.Parse(userId) > 100))) .Returns(Task.FromResult(null)); - - var results = await _xdiBatchItemService.CreateFtpPayload(testFile); + + _mockXdiBatchProcessInfoRepository.Setup(x => x.FindBatchProcessInfoByStatus(XdiBatchProcessStatus.InProgress)).ReturnsAsync(xdiBatchProcessInfo) + .Verifiable(); + + var request = new XdiBatchRequest() + { + XdiAppendFileRootBasePath = "test/test" + }; + + var results = await _xdiBatchItemService.BuildXdiFiles(testFile, request.XdiAppendFileRootBasePath, xdiBatchProcessInfo.FirstOrDefault()); Assert.AreEqual(1, results.Count); Assert.True(results.Exists(x => x.UserId == "100" && x.Value == DeliveryPreference.Paper)); @@ -351,20 +386,20 @@ namespace LCU.API.Internal.MemberPreferencesApi.UnitTests.Services [Test] public async Task MarkPendingSuccessful_OK() { - var payload = new List() + var batchFileExportList = new List() { - new FtpQueuePayloadItem() + new XdiBatchFileExport() { UserId = "100", Value = DeliveryPreference.Paper }, - new FtpQueuePayloadItem() + new XdiBatchFileExport() { UserId = "101", Value = "test@test.com" } }; - var payloadString = JsonConvert.SerializeObject(payload); + var payloadString = JsonConvert.SerializeObject(batchFileExportList); var response = new LCU.Library.Internal.ApiResponse.Models.Response() { @@ -381,7 +416,7 @@ namespace LCU.API.Internal.MemberPreferencesApi.UnitTests.Services _mockBatchItemsRepository.Setup(x => x.MarkPendingSuccessful(It.IsAny>())).ReturnsAsync(true) .Verifiable(); - var result = await _xdiBatchItemService.MarkPendingSuccessful(response); + var result = await _xdiBatchItemService.MarkPendingSuccessful(batchFileExportList); Assert.True(result); diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi.UnitTests/XdiBatch/XdiBatchFileTest.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi.UnitTests/XdiBatch/XdiBatchFileTest.cs index 0366a84..8d3dd4f 100644 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi.UnitTests/XdiBatch/XdiBatchFileTest.cs +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi.UnitTests/XdiBatch/XdiBatchFileTest.cs @@ -47,7 +47,7 @@ namespace LCU.API.Internal.MemberPreferencesApi.UnitTests.XdiBatch var results = newFile.ConvertToDataFile(); Assert.NotNull(fileName); - Assert.AreEqual("Enrollment_AddElectronic_LMCU.txt", fileName); + Assert.AreEqual("Enrollment_AddElectronic_LMCU", fileName); Assert.NotNull(results); Assert.NotNull(stringResults); diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Configuration/CoreApiWrapperConfiguration.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Configuration/CoreApiWrapperConfiguration.cs index 5c0c64a..ec17297 100644 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Configuration/CoreApiWrapperConfiguration.cs +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Configuration/CoreApiWrapperConfiguration.cs @@ -1,6 +1,6 @@ namespace LCU.API.Internal.MemberPreferencesApi.Configuration; -public class CoreApiWrapperConfiguration +public class CoreApiWrapperConfiguration { public string CoreApiBaseUrl { get; set; } public string CoreApiGetAgreementByUserId { get; set; } @@ -11,6 +11,5 @@ public class CoreApiWrapperConfiguration public string CoreApiGetAgreementAccountsByOrganizationId { get; set; } public string CoreApiGetAuditAccountsFromDateLastMaintained { get; set; } public string CoreApiGetAuditAgreementFromDateLastMaintained { get; set; } - public string CoreApiGetAuditOrganizationFromDateLastMaintained { get; set; } public string CoreApiUpdateAccountsMaintenanceRequest { get; set; } } diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Configuration/DnaAuditProcessConfiguration.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Configuration/DnaAuditProcessConfiguration.cs deleted file mode 100644 index f17435b..0000000 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Configuration/DnaAuditProcessConfiguration.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace LCU.API.Internal.MemberPreferencesApi.Configuration; - -public class DnaAuditProcessConfiguration -{ - public int LookBackMinutes { get; set; } - public int NumberOfAllowedConsecutiveFailures { get; set; } -} diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Configuration/FeatureFlags.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Configuration/FeatureFlags.cs index 4016b43..e753a5a 100644 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Configuration/FeatureFlags.cs +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Configuration/FeatureFlags.cs @@ -1,11 +1,7 @@ namespace LCU.API.Internal.MemberPreferencesApi.Configuration; -public class FeatureFlags +public class FeatureFlags { - public bool RunHostedServices { get; set; } public bool RunXdiBatchProcessConsumer { get; set; } - public bool RunXdiSshResponseConsumer { get; set; } - public bool RunAccountDnaFieldChangeConsumer { get; set; } - public bool RunAgreementDnaFieldChangeConsumer { get; set; } - public bool RunOrganizationDnaFieldChangeConsumer { get; set; } + public bool RunDnaAuditProcessConsumer { get; set; } } diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Configuration/FileOperationsApiConfiguration.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Configuration/FileOperationsApiConfiguration.cs new file mode 100644 index 0000000..5652a00 --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Configuration/FileOperationsApiConfiguration.cs @@ -0,0 +1,11 @@ +using System.ComponentModel.DataAnnotations.Schema; + +namespace LCU.API.Internal.MemberPreferencesApi.Configuration; + +public class FileOperationsApiConfiguration +{ + public string Url { get; set; } + public string AppendFile { get; set; } + [NotMapped] + public string AppendFileUrl => Url + AppendFile; +} diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Configuration/FtpApiConfiguration.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Configuration/FtpApiConfiguration.cs deleted file mode 100644 index 5f7fb61..0000000 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Configuration/FtpApiConfiguration.cs +++ /dev/null @@ -1,11 +0,0 @@ -using System.ComponentModel.DataAnnotations.Schema; - -namespace LCU.API.Internal.MemberPreferencesApi.Configuration; - -public class FtpApiConfiguration -{ - public string Url { get; set; } - public string QueueSshFtpRequestEndpoint { get; set; } - [NotMapped] - public string QueueSshFtpRequestEndpointUrl => Url + QueueSshFtpRequestEndpoint; -} diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Configuration/ReceiveEndpointConfigurations.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Configuration/ReceiveEndpointConfigurations.cs index a92f63b..b5a9544 100644 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Configuration/ReceiveEndpointConfigurations.cs +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Configuration/ReceiveEndpointConfigurations.cs @@ -6,8 +6,6 @@ public class ReceiveEndpointConfigurations { public ReceiveEndpointConfiguration XdiBatchProcessEndpoint { get; set; } public ReceiveEndpointConfiguration XdiBatchConfirmEndpoint { get; set; } - public ReceiveEndpointConfiguration DnaAccountAuditEndpoint { get; set; } - public ReceiveEndpointConfiguration DnaOrganizationAuditEndpoint { get; set; } - public ReceiveEndpointConfiguration DnaAgreementAuditEndpoint { get; set; } + public ReceiveEndpointConfiguration DnaAuditProcessEndpoint { get; set; } } diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Configuration/ScanBiCoreApiWrapperConfiguration.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Configuration/ScanBiCoreApiWrapperConfiguration.cs new file mode 100644 index 0000000..aab2111 --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Configuration/ScanBiCoreApiWrapperConfiguration.cs @@ -0,0 +1,12 @@ +using System.ComponentModel.DataAnnotations.Schema; + +namespace LCU.API.Internal.MemberPreferencesApi.Configuration +{ + public class ScanBiCoreApiWrapperConfiguration + { + public string ScanBiCoreApiWrapperUrl { get; set; } + public string GetAuditOrganizationFromDateLastMaintainedEndpoint { get; set; } + [NotMapped] + public string GetAuditOrganizationFromDateLastMaintainedUrl => ScanBiCoreApiWrapperUrl + GetAuditOrganizationFromDateLastMaintainedEndpoint; + } +} diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Configuration/XdiSftpApiConfiguration.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Configuration/XdiSftpApiConfiguration.cs deleted file mode 100644 index cd30f8b..0000000 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Configuration/XdiSftpApiConfiguration.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace LCU.API.Internal.MemberPreferencesApi.Configuration; - -public class XdiSftpApiConfiguration -{ - public string HostName { get; set; } - public int PortNumber { get; set; } - public string UserName { get; set; } - public string Password { get; set; } - public string Fingerprint { get; set; } - public string SftpRootBasePath { get; set; } -} diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Consumers/AccountDnaFieldChangeConsumer.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Consumers/AccountDnaFieldChangeConsumer.cs deleted file mode 100644 index 53d0143..0000000 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Consumers/AccountDnaFieldChangeConsumer.cs +++ /dev/null @@ -1,43 +0,0 @@ -using LCU.API.Internal.MemberPreferencesApi.Services.DnaAuditServices; -using MassTransit; - -namespace LCU.API.Internal.MemberPreferencesApi.Consumers; - -public class AccountDnaFieldChangeConsumer : IConsumer -{ - private readonly IServiceScopeFactory _scopeFactory; - - public AccountDnaFieldChangeConsumer(IServiceScopeFactory scopeFactory) - { - _scopeFactory = scopeFactory; - } - - public async Task Consume(ConsumeContext context) - { - try - { - Log.Debug("Starting AccountDnaFieldChangeConsumer."); - Log.Information($"New Account Received for: {context.Message.DnaProcessType} Process - {context.Message.DnaFieldIdInformation}"); - using var scope = _scopeFactory.CreateScope(); - await Task.Run(async () => await scope.ServiceProvider.GetRequiredService().HandleAccountAuditCheck(context.Message)); - Log.Debug("Ending DnaAccountAuditServiceConsumer."); - } - catch (ServiceException serviceException) - { - Log.ForContext(Enum.GetName(typeof(PropertyEnum), PropertyEnum.Group), - Enum.GetName(typeof(GroupEnum), GroupEnum.ITDevelopment)) - .Error(serviceException, $"AccountDnaFieldChangeConsumer Failure. " + - $"The request is placed on AccountDnaFieldChangeConsumer_error."); - throw serviceException; - } - catch (Exception exception) - { - Log.ForContext(Enum.GetName(typeof(PropertyEnum), PropertyEnum.Group), - Enum.GetName(typeof(GroupEnum), GroupEnum.ITDevelopment)) - .Fatal(exception, $"Unexpected AccountDnaFieldChangeConsumer Failure. " + - $"The request is placed on AccountDnaFieldChangeConsumer_error."); - throw; - } - } -} - diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Consumers/AgreementDnaFieldChangeConsumer.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Consumers/AgreementDnaFieldChangeConsumer.cs deleted file mode 100644 index 03f5495..0000000 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Consumers/AgreementDnaFieldChangeConsumer.cs +++ /dev/null @@ -1,42 +0,0 @@ -using LCU.API.Internal.MemberPreferencesApi.Services.DnaAuditServices; -using MassTransit; - -namespace LCU.API.Internal.MemberPreferencesApi.Consumers; - -public class AgreementDnaFieldChangeConsumer : IConsumer -{ - private readonly IServiceScopeFactory _scopeFactory; - - public AgreementDnaFieldChangeConsumer(IServiceScopeFactory scopeFactory) - { - _scopeFactory = scopeFactory; - } - - public async Task Consume(ConsumeContext context) - { - try - { - Log.Debug("Starting AgreementDnaFieldChangeConsumer."); - Log.Information($"New Agreement Received for : {context.Message.DnaProcessType} Process - {context.Message.DnaFieldIdInformation}"); - using var scope = _scopeFactory.CreateScope(); - await Task.Run(async () => await scope.ServiceProvider.GetRequiredService().HandleAgreementAuditCheck(context.Message)); - Log.Debug("Ending AgreementDnaFieldChangeConsumer."); - } - catch (ServiceException serviceException) - { - Log.ForContext(Enum.GetName(typeof(PropertyEnum), PropertyEnum.Group), - Enum.GetName(typeof(GroupEnum), GroupEnum.ITDevelopment)) - .Error(serviceException, $"AgreementDnaFieldChangeConsumer Failure. " + - $"The request is placed on AgreementDnaFieldChangeConsumer_error."); - throw; - } - catch (Exception exception) - { - Log.ForContext(Enum.GetName(typeof(PropertyEnum), PropertyEnum.Group), - Enum.GetName(typeof(GroupEnum), GroupEnum.ITDevelopment)) - .Fatal(exception, $"Unexpected AgreementDnaFieldChangeConsumer Failure. " + - $"The TransactionRequest is placed on AgreementDnaFieldChangeConsumer_error."); - throw; - } - } -} diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Consumers/DnaAuditProcessConsumer.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Consumers/DnaAuditProcessConsumer.cs new file mode 100644 index 0000000..2d4ec19 --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Consumers/DnaAuditProcessConsumer.cs @@ -0,0 +1,41 @@ +using LCU.API.Internal.MemberPreferencesApi.Services.DnaAuditServices; +using MassTransit; + +namespace LCU.API.Internal.MemberPreferencesApi.Consumers; + +public class DnaAuditProcessConsumer : IConsumer +{ + private readonly IServiceScopeFactory _scopeFactory; + + public DnaAuditProcessConsumer(IServiceScopeFactory scopeFactory) + { + _scopeFactory = scopeFactory; + } + + public async Task Consume(ConsumeContext context) + { + try + { + Log.Debug("Starting DnaAuditProcessConsumer."); + using var scope = _scopeFactory.CreateAsyncScope(); + await scope.ServiceProvider.GetRequiredService().HandleDnaAuditProcessRequest(context.Message); + Log.Debug("Ending DnaAuditProcessConsumer."); + } + catch (ServiceException serviceException) + { + Log.ForContext(Enum.GetName(typeof(PropertyEnum), PropertyEnum.Group), + Enum.GetName(typeof(GroupEnum), GroupEnum.ITDevelopment)) + .Error(serviceException, $"DnaAuditProcess Failure. " + + $"The request is placed on DnaAuditProcess_error."); + throw; + } + catch (Exception exception) + { + Log.ForContext(Enum.GetName(typeof(PropertyEnum), PropertyEnum.Group), + Enum.GetName(typeof(GroupEnum), GroupEnum.ITDevelopment)) + .Fatal(exception, $"Unexpected DnaAuditProcess Failure. " + + $"The TransactionRequest is placed on DnaAuditProcess_error."); + throw; + } + } +} diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Consumers/OrganizationDnaFieldChangeConsumer.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Consumers/OrganizationDnaFieldChangeConsumer.cs deleted file mode 100644 index b328d1e..0000000 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Consumers/OrganizationDnaFieldChangeConsumer.cs +++ /dev/null @@ -1,43 +0,0 @@ -using LCU.API.Internal.MemberPreferencesApi.Services.DnaAuditServices; -using MassTransit; - -namespace LCU.API.Internal.MemberPreferencesApi.Consumers; - -public class OrganizationDnaFieldChangeConsumer : IConsumer -{ - private readonly IServiceScopeFactory _scopeFactory; - - public OrganizationDnaFieldChangeConsumer(IServiceScopeFactory scopeFactory) - { - _scopeFactory = scopeFactory; - } - - public async Task Consume(ConsumeContext context) - { - try - { - Log.Debug("Starting OrganizationDnaFieldChangeConsumer."); - Log.Information($"New Organization Received for: {context.Message.DnaProcessType} Process - {context.Message.DnaFieldIdInformation}"); - using var scope = _scopeFactory.CreateScope(); - await Task.Run(async () => await scope.ServiceProvider.GetRequiredService().HandleOrganizationAuditCheck(context.Message)); - Log.Debug("Ending OrganizationDnaFieldChangeConsumer."); - } - catch (ServiceException serviceException) - { - Log.ForContext(Enum.GetName(typeof(PropertyEnum), PropertyEnum.Group), - Enum.GetName(typeof(GroupEnum), GroupEnum.ITDevelopment)) - .Error(serviceException, $"OrganizationDnaFieldChangeConsumer Failure. " + - $"The request is placed on OrganizationDnaFieldChangeConsumer_error."); - throw; - } - catch (Exception exception) - { - Log.ForContext(Enum.GetName(typeof(PropertyEnum), PropertyEnum.Group), - Enum.GetName(typeof(GroupEnum), GroupEnum.ITDevelopment)) - .Fatal(exception, $"Unexpected OrganizationDnaFieldChangeConsumer Consumer Failure. " + - $"The request is placed on OrganizationDnaFieldChangeConsumer_error."); - throw; - } - } -} - diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Consumers/XdiBatchProcessConsumer.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Consumers/XdiBatchProcessConsumer.cs index e808ef6..5846890 100644 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Consumers/XdiBatchProcessConsumer.cs +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Consumers/XdiBatchProcessConsumer.cs @@ -3,26 +3,26 @@ using MassTransit; namespace LCU.API.Internal.MemberPreferencesApi.Consumers; -public class XdiBatchProcessConsumer : IConsumer +public class XdiBatchProcessConsumer : IConsumer { private readonly IServiceScopeFactory _scopeFactory; public XdiBatchProcessConsumer(IServiceScopeFactory scopeFactory) { _scopeFactory = scopeFactory; } - public async Task Consume(ConsumeContext context) + public async Task Consume(ConsumeContext context) { try { - using var scope = _scopeFactory.CreateScope(); - await Task.Run(async () => await scope.ServiceProvider.GetRequiredService().CreateXdiBatchFiles(context.Message)); + using var scope = _scopeFactory.CreateScope(); + await Task.Run(async () => await scope.ServiceProvider.GetRequiredService().HandleXdiBatchProcess(context.Message)); } catch (ServiceException ex) { Log.ForContext(Enum.GetName(typeof(PropertyEnum), PropertyEnum.Group), Enum.GetName(typeof(GroupEnum), GroupEnum.ITDevelopment)) .Error($"XdiBatchProcessConsumer Failure. " + - $"The response is placed on LCU.MemberPreferencesApi.XdiAuditProcess_error. " + + $"The response is placed on LCU.MemberPreferencesApi.XdiBatchProcess_error. " + $"Error Message: {ex.Message}"); throw; } @@ -31,7 +31,7 @@ public class XdiBatchProcessConsumer : IConsumer Log.ForContext(Enum.GetName(typeof(PropertyEnum), PropertyEnum.Group), Enum.GetName(typeof(GroupEnum), GroupEnum.ITDevelopment)) .Fatal(exception, $"Unexpected XdiBatchProcessConsumer Failure. " + - $"The response is placed on LCU.MemberPreferencesApi.XdiAuditProcess_error."); + $"The response is placed on LCU.MemberPreferencesApi.XdiBatchProcess_error."); throw; } } diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Consumers/XdiSshResponseConsumer.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Consumers/XdiSshResponseConsumer.cs deleted file mode 100644 index 5c28ff8..0000000 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Consumers/XdiSshResponseConsumer.cs +++ /dev/null @@ -1,39 +0,0 @@ -using ApiResponse = LCU.Library.Internal.ApiResponse.Models; -using LCU.API.Internal.MemberPreferencesApi.Services.XdiServices; -using MassTransit; - -namespace LCU.API.Internal.MemberPreferencesApi.Consumers; - -public class XdiSshResponseConsumer : IConsumer -{ - private readonly IServiceScopeFactory _scopeFactory; - public XdiSshResponseConsumer(IServiceScopeFactory scopeFactory) - { - _scopeFactory = scopeFactory; - } - public async Task Consume(ConsumeContext context) - { - try - { - using var scope = _scopeFactory.CreateScope(); - await Task.Run(async () => await scope.ServiceProvider.GetRequiredService().MarkPendingSuccessful(context.Message)); - } - catch (ServiceException ex) - { - Log.ForContext(Enum.GetName(typeof(PropertyEnum), PropertyEnum.Group), - Enum.GetName(typeof(GroupEnum), GroupEnum.ITDevelopment)) - .Error($"XdiSshResponseConsumer Failure. " + - $"The ApiResponse.Response is placed on LCU.MemberPreferencesApi.XdiBatchConfirm_error. " + - $"Error Message: {ex.Message}"); - throw; - } - catch (Exception exception) - { - Log.ForContext(Enum.GetName(typeof(PropertyEnum), PropertyEnum.Group), - Enum.GetName(typeof(GroupEnum), GroupEnum.ITDevelopment)) - .Fatal(exception, $"Unexpected XdiSshResponseConsumer Failure. " + - $"The ApiResponse.Response is placed on LCU.MemberPreferencesApi.XdiBatchConfirm_error."); - throw; - } - } -} diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Controllers/AuditController.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Controllers/AuditController.cs deleted file mode 100644 index 8c971b8..0000000 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Controllers/AuditController.cs +++ /dev/null @@ -1,79 +0,0 @@ -using LCU.API.Internal.MemberPreferencesApi.Services.QueueServices; -using Microsoft.AspNetCore.Mvc; - -namespace LCU.API.Internal.MemberPreferencesApi.Controllers; - -[ApiController] -[Route("api/[controller]")] -public class AuditController : ControllerBase -{ - private readonly IQueueDnaAccountAuditService _dnaAccountAuditService; - private readonly IQueueDnaOrganizationAuditService _dnaOrganizationAuditService; - private readonly IQueueDnaAgreementAuditService _dnaAgreementAuditService; - - public AuditController(IQueueDnaAccountAuditService dnaAccountAuditService, - IQueueDnaOrganizationAuditService dnaOrganizationAuditService, - IQueueDnaAgreementAuditService dnaAgreementAuditService) - { - _dnaAccountAuditService = dnaAccountAuditService; - _dnaOrganizationAuditService = dnaOrganizationAuditService; - _dnaAgreementAuditService = dnaAgreementAuditService; - } - - [HttpPost("EnqueueDNAOrganizationAuditRecords")] - [ProducesResponseType(200)] - [ProducesResponseType(400)] - [ProducesResponseType(500)] - public async Task EnqueueDNAOrganizationAuditRecords([FromBody] List organizationIds) - { - try - { - Log.Information($"Forced {organizationIds.Count} DNAOrganizationAuditRecords to be queued"); - await _dnaOrganizationAuditService.QueueDataAuditForOrganizations(organizationIds); - return Ok(); - } - catch (Exception ex) - { - Log.Error(ex, $"Failure in {GetType().Name}"); - return StatusCode((int) System.Net.HttpStatusCode.InternalServerError); - } - } - - [HttpPost("EnqueueDNAAgreementAuditRecords")] - [ProducesResponseType(200)] - [ProducesResponseType(400)] - [ProducesResponseType(500)] - public async Task EnqueueDNAAgreementAuditRecords([FromBody] List agreementIds) - { - try - { - Log.Information($"Forced {agreementIds.Count} DNAAgreementAuditRecords to be queued"); - await _dnaAgreementAuditService.QueueDataAuditForAgreements(agreementIds); - return Ok(); - } - catch (Exception ex) - { - Log.Error(ex, $"Failure in {GetType().Name}"); - return StatusCode((int) System.Net.HttpStatusCode.InternalServerError); - } - } - - [HttpPost("EnqueueDNAAccountAuditRecords")] - [ProducesResponseType(200)] - [ProducesResponseType(400)] - [ProducesResponseType(500)] - public async Task EnqueueDNAAccountAuditRecords([FromBody] List accountNumbers) - { - try - { - Log.Information($"Forced {accountNumbers.Count} DNAAccountAuditRecords to be queued"); - await _dnaAccountAuditService.QueueDataAuditForAccounts(accountNumbers); - return Ok(); - } - catch (Exception ex) - { - Log.Error(ex, $"Failure in {GetType().Name}"); - return StatusCode((int) System.Net.HttpStatusCode.InternalServerError); - } - } -} diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Controllers/QueueDnaAuditProcessController.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Controllers/QueueDnaAuditProcessController.cs new file mode 100644 index 0000000..8aeef63 --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Controllers/QueueDnaAuditProcessController.cs @@ -0,0 +1,39 @@ +using LCU.API.Internal.MemberPreferencesApi.Services.QueueServices; +using Microsoft.AspNetCore.Mvc; +using Microsoft.FeatureManagement.Mvc; + +namespace LCU.API.Internal.MemberPreferencesApi.Controllers; + +[FeatureGate(FeatureGates.EnableControllers)] +[ApiController] +[Route("api/[controller]")] +public class QueueDnaAuditProcessController : ControllerBase +{ + private readonly IQueueDnaAuditProcessService _queueDnaAuditProcessService; + + public QueueDnaAuditProcessController(IQueueDnaAuditProcessService queueDnaAuditProcessService) + { + _queueDnaAuditProcessService = queueDnaAuditProcessService; + } + + [HttpPost] + [ProducesResponseType(200)] + [ProducesResponseType(500)] + public async Task QueueDnaAuditProcessRequest(DnaAuditProcessRequest request) + { + try + { + await _queueDnaAuditProcessService.QueueDnaAuditProcessRequest(request); + return Ok(); + } + catch (ServiceException) + { + return StatusCode(StatusCodes.Status500InternalServerError); + } + catch (Exception exception) + { + Log.Error(exception, "Unexpected Exception"); + return StatusCode(StatusCodes.Status500InternalServerError); + } + } +} diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Controllers/QueueXdiBatchProcessController.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Controllers/QueueXdiBatchProcessController.cs new file mode 100644 index 0000000..f48e426 --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Controllers/QueueXdiBatchProcessController.cs @@ -0,0 +1,37 @@ +using LCU.API.Internal.MemberPreferencesApi.Services.QueueServices; +using Microsoft.AspNetCore.Mvc; + +namespace LCU.API.Internal.MemberPreferencesApi.Controllers; + +[ApiController] +[Route("api/[controller]")] +public class QueueXdiBatchProcessController : ControllerBase +{ + private readonly IQueueXdiBatchProcessService _queueXdiBatchProcessService; + + public QueueXdiBatchProcessController(IQueueXdiBatchProcessService queueXdiBatchProcessService) + { + _queueXdiBatchProcessService = queueXdiBatchProcessService; + } + + [HttpPost] + [ProducesResponseType(200)] + [ProducesResponseType(500)] + public async Task QueueXdiBatchRequest(XdiBatchProcessRequest request) + { + try + { + await _queueXdiBatchProcessService.QueueXdiBatchProcess(request); + return Ok(); + } + catch (ServiceException) + { + return StatusCode(StatusCodes.Status500InternalServerError); + } + catch (Exception exception) + { + Log.Error(exception, "Unexpected Exception"); + return StatusCode(StatusCodes.Status500InternalServerError); + } + } +} diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Controllers/XdiController.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Controllers/XdiController.cs new file mode 100644 index 0000000..6f6d040 --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Controllers/XdiController.cs @@ -0,0 +1,44 @@ +using LCU.API.Internal.MemberPreferencesApi.Services.XdiServices; +using LCU.Library.Internal.MemberPreferencesApiModels.Entities; +using Microsoft.AspNetCore.Mvc; + +namespace LCU.API.Internal.MemberPreferencesApi.Controllers; + +[ApiController] +[Route("api/[controller]")] +public class XdiController : ControllerBase +{ + private readonly IXdiBatchService _xdiBatchService; + + public XdiController(IXdiBatchService xdiBatchService) + { + _xdiBatchService = xdiBatchService; + } + + [HttpPost("SaveRange")] + [ProducesResponseType(200)] + [ProducesResponseType(typeof(IEnumerable), 400)] + [ProducesResponseType(500)] + public async Task SaveRange([FromBody] List xdiBatchItems) + { + try + { + if (xdiBatchItems is null || !xdiBatchItems.Any()) + { + return BadRequest("XdiBatchItems cannot be null or empty."); + } + Log.Information($"Save {xdiBatchItems.Count} Xdi Batch Items attempted."); + await _xdiBatchService.SaveRangeAsync(xdiBatchItems); + return Ok(); + } + catch (ServiceException exception) + { + return StatusCode(StatusCodes.Status500InternalServerError, exception.Message); + } + catch (Exception exception) + { + Log.Error(exception, "Unexpected Exception"); + return StatusCode(StatusCodes.Status500InternalServerError); + } + } +} diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/DataAccess/CoreApiWrapperDao.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/DataAccess/CoreApiWrapperDao.cs index bb8d145..f3199f8 100644 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/DataAccess/CoreApiWrapperDao.cs +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/DataAccess/CoreApiWrapperDao.cs @@ -41,7 +41,8 @@ public class CoreApiWrapperDao : ICoreApiWrapperDao public async Task> GetAgreementsByAccountId(long accountId) { var path = $"{_coreApiWrapperConfig.CoreApiBaseUrl}{_coreApiWrapperConfig.CoreApiGetAgreementsByAccountId.Replace("{accountId}", accountId.ToString())}"; - return await _getRequest.Async>(path, 0); + + return await _getRequest.AsyncWithNewton>(new Uri(path), null, 0); } public async Task GetAgreementAccountByAccountId(long accountId) @@ -85,13 +86,6 @@ public class CoreApiWrapperDao : ICoreApiWrapperDao return await _getRequest.Async>(path, 0, 240); } - public async Task> GetAuditOrganizationFromDateLastMaintained(DateTime dateTime) - { - var dtString = dateTime.ToString("s").Replace(":", "%3A"); - var path = $"{_coreApiWrapperConfig.CoreApiBaseUrl}{_coreApiWrapperConfig.CoreApiGetAuditOrganizationFromDateLastMaintained}?dateLastMaintained={dtString}"; - return await _getRequest.Async>(path, 0, 240); - } - public async Task UpdateAgreementAccountsDeliveryMethod(IEnumerable accountIds, string deliveryMethod, string userId) { var path = $"{_coreApiWrapperConfig.CoreApiBaseUrl}{_coreApiWrapperConfig.CoreApiUpdateAccountsMaintenanceRequest}"; diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/DataAccess/FileOperationsApiDao.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/DataAccess/FileOperationsApiDao.cs new file mode 100644 index 0000000..e4b7c48 --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/DataAccess/FileOperationsApiDao.cs @@ -0,0 +1,24 @@ +using LCU.Library.Internal.FileOperationsModels.Models; +using LCU.Library.Internal.LcuHttpClient.HttpRequest; + +namespace LCU.API.Internal.MemberPreferencesApi.DataAccess; + +public class FileOperationsApiDao : IFileOperationsApiDao +{ + private readonly FileOperationsApiConfiguration _fileOperationsApiConfiguration; + private readonly IPostRequest _postRequest; + + public FileOperationsApiDao(FileOperationsApiConfiguration fileOperationsApiConfiguration, IPostRequest postRequest) + { + _fileOperationsApiConfiguration = fileOperationsApiConfiguration; + _postRequest = postRequest; + } + + public async Task AppendFileAsync(AppendFileRequest request) + { + var url = new Uri($"{_fileOperationsApiConfiguration.AppendFileUrl}"); + var result = await _postRequest.AsyncWithNewton(url, request, 0); + + return result; + } +} diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/DataAccess/FtpApiDao.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/DataAccess/FtpApiDao.cs deleted file mode 100644 index 281781d..0000000 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/DataAccess/FtpApiDao.cs +++ /dev/null @@ -1,21 +0,0 @@ -using LCU.Api.Internal.FTPLib.Models; -using LCU.Library.Internal.LcuHttpClient.HttpRequest; - -namespace LCU.API.Internal.MemberPreferencesApi.DataAccess; - -public class FtpApiDao : IFtpApiDao -{ - private readonly FtpApiConfiguration _ftpApiConfiguration; - private readonly IPostRequest _postRequest; - - public FtpApiDao(FtpApiConfiguration ftpApiConfiguration, IPostRequest postRequest) - { - _ftpApiConfiguration = ftpApiConfiguration; - _postRequest = postRequest; - } - - public async Task SendFtpAsync(SshFtpRequest request) - { - await _postRequest.Async(new Uri(_ftpApiConfiguration.QueueSshFtpRequestEndpointUrl), request, 0); - } -} diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/DataAccess/ICoreApiWrapperDao.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/DataAccess/ICoreApiWrapperDao.cs index 353a630..dfd05a0 100644 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/DataAccess/ICoreApiWrapperDao.cs +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/DataAccess/ICoreApiWrapperDao.cs @@ -12,6 +12,5 @@ public interface ICoreApiWrapperDao public Task> GetAgreementAccountsByOrganizationId(long organizationId); public Task> GetAuditAccountsFromDateLastMaintained(DateTime dateTime); public Task> GetAuditAgreementFromDateLastMaintained(DateTime dateTime); - public Task> GetAuditOrganizationFromDateLastMaintained(DateTime dateTime); public Task UpdateAgreementAccountsDeliveryMethod(IEnumerable accountIds, string deliveryMethod, string userId); } diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/DataAccess/IFileOperationsApiDao.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/DataAccess/IFileOperationsApiDao.cs new file mode 100644 index 0000000..d120b4d --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/DataAccess/IFileOperationsApiDao.cs @@ -0,0 +1,8 @@ +using LCU.Library.Internal.FileOperationsModels.Models; + +namespace LCU.API.Internal.MemberPreferencesApi.DataAccess; + +public interface IFileOperationsApiDao +{ + public Task AppendFileAsync(AppendFileRequest request); +} diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/DataAccess/IFtpApiDao.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/DataAccess/IFtpApiDao.cs deleted file mode 100644 index 07dd070..0000000 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/DataAccess/IFtpApiDao.cs +++ /dev/null @@ -1,8 +0,0 @@ -using LCU.Api.Internal.FTPLib.Models; - -namespace LCU.API.Internal.MemberPreferencesApi.DataAccess; - -public interface IFtpApiDao -{ - public Task SendFtpAsync(SshFtpRequest sftpRequest); -} diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/DataAccess/IScanBiCoreApiWrapperDao.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/DataAccess/IScanBiCoreApiWrapperDao.cs new file mode 100644 index 0000000..0cf2add --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/DataAccess/IScanBiCoreApiWrapperDao.cs @@ -0,0 +1,7 @@ +namespace LCU.API.Internal.MemberPreferencesApi.DataAccess +{ + public interface IScanBiCoreApiWrapperDao + { + public Task> GetAuditOrganizationFromDateLastMaintained(DateTime dateTime); + } +} diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/DataAccess/ScanBiCoreApiWrapperDao.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/DataAccess/ScanBiCoreApiWrapperDao.cs new file mode 100644 index 0000000..5b312a7 --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/DataAccess/ScanBiCoreApiWrapperDao.cs @@ -0,0 +1,22 @@ +using LCU.Library.Internal.LcuHttpClient.HttpRequest; + +namespace LCU.API.Internal.MemberPreferencesApi.DataAccess; + +public class ScanBiCoreApiWrapperDao : IScanBiCoreApiWrapperDao +{ + private readonly ScanBiCoreApiWrapperConfiguration _scanBiCoreApiWrapperConfig; + private readonly IGetRequest _getRequest; + + public ScanBiCoreApiWrapperDao(ScanBiCoreApiWrapperConfiguration scanBiCoreApiWrapperConfig, IGetRequest getRequest) + { + _scanBiCoreApiWrapperConfig = scanBiCoreApiWrapperConfig; + _getRequest = getRequest; + } + + public async Task> GetAuditOrganizationFromDateLastMaintained(DateTime dateTime) + { + var dtString = dateTime.ToString("s").Replace(":", "%3A"); + var path = $"{_scanBiCoreApiWrapperConfig.GetAuditOrganizationFromDateLastMaintainedUrl}?dateLastMaintained={dtString}"; + return await _getRequest.Async>(path, 0, 360); + } +} diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi.csproj b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi.csproj index 9025859..e5b4978 100644 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi.csproj +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi.csproj @@ -6,17 +6,20 @@ - + - + + + - - + + + all diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Models/Requests/XdiBatchRequest.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Models/Requests/XdiBatchRequest.cs index e80f6c1..372a4a4 100644 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Models/Requests/XdiBatchRequest.cs +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Models/Requests/XdiBatchRequest.cs @@ -6,5 +6,5 @@ public class XdiBatchRequest { public List XdiBatchItems { get; set; } public XdiBatch XdiBatch { get; set; } - public string SftpRootBasePath { get; set; } + public string XdiAppendFileRootBasePath { get; set; } } diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Models/Requests/XdiBatchRequests.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Models/Requests/XdiBatchRequests.cs deleted file mode 100644 index f1822a1..0000000 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Models/Requests/XdiBatchRequests.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace LCU.API.Internal.MemberPreferencesApi.Models.Requests; - -public class XdiBatchRequests -{ - public List XdiBatchRequestList { get; set; } -} diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Models/XdiBatch.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Models/XdiBatch.cs index ae06b66..a56fb8e 100644 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Models/XdiBatch.cs +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Models/XdiBatch.cs @@ -77,30 +77,26 @@ public class XdiBatch return false; } - public IReadOnlyCollection GetNonEmptyFiles(string pathPrefix = "") + public IReadOnlyCollection GetNonEmptyFiles() { var list = new List(); if (_updateMemberEmail.HasRows()) { - _updateMemberEmail.FolderPrefix = pathPrefix; list.Add(_updateMemberEmail); } if (_addMemberElectronic.HasRows()) { - _addMemberElectronic.FolderPrefix = pathPrefix; list.Add(_addMemberElectronic); } if (_updateMemberToElectronic.HasRows()) { - _updateMemberToElectronic.FolderPrefix = pathPrefix; list.Add(_updateMemberToElectronic); } if (_updateMemberToPrint.HasRows()) { - _updateMemberToPrint.FolderPrefix = pathPrefix; list.Add(_updateMemberToPrint); } diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Models/XdiBatchFile.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Models/XdiBatchFile.cs index f18bbd8..c05f57c 100644 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Models/XdiBatchFile.cs +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Models/XdiBatchFile.cs @@ -5,20 +5,16 @@ namespace LCU.API.Internal.MemberPreferencesApi.Models; public class XdiBatchFile { - private const string Ext = "LMCU.txt"; public XdiFileType Type { get; set; } public List Data { get; set; } = new List(); - public string FolderPrefix { get; set; } = ""; - public string GetFileName() { switch (Type) { - case XdiFileType.AddMemberElectronic: return $"{FolderPrefix}Enrollment_AddElectronic_{Ext}"; - case XdiFileType.DeleteMember: return $"{FolderPrefix}Enrollment_Delete_{Ext}"; - case XdiFileType.UpdateMemberEmail: return $"{FolderPrefix}Enrollment_UpdateEmail_{Ext}"; - case XdiFileType.UpdateMemberToElectronic: return $"{FolderPrefix}Enrollment_UpdateToElectronic_{Ext}"; - case XdiFileType.UpdateMemberToPrint: return $"{FolderPrefix}Enrollment_UpdateToPrint_{Ext}"; + case XdiFileType.AddMemberElectronic: return $"Enrollment_AddElectronic_LMCU"; + case XdiFileType.UpdateMemberEmail: return $"Enrollment_UpdateEmail_LMCU"; + case XdiFileType.UpdateMemberToElectronic: return $"Enrollment_UpdateToElectronic_LMCU"; + case XdiFileType.UpdateMemberToPrint: return $"Enrollment_UpdateToPrint_LMCU"; default: throw new Exception($"Unknown File Type in XDI BatchFile: {Type}"); } } @@ -39,11 +35,10 @@ public class XdiBatchFile return Data.Select(batchRow => batchRow.ConvertToRow(Type)); } - public byte[] ConvertToDataFile() + public string ConvertToDataFile() { var allRows = ConvertToDataRows(); - var file = string.Join("\n", allRows); - return Encoding.UTF8.GetBytes(file); + return string.Join("\n", allRows); } public bool HasRows() diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Models/FtpPayloadItem.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Models/XdiBatchFileExport.cs similarity index 80% rename from LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Models/FtpPayloadItem.cs rename to LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Models/XdiBatchFileExport.cs index 2fd1a0f..d145246 100644 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Models/FtpPayloadItem.cs +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Models/XdiBatchFileExport.cs @@ -1,6 +1,6 @@ namespace LCU.API.Internal.MemberPreferencesApi.Models; -public class FtpQueuePayloadItem +public class XdiBatchFileExport { public string UserId { get; set; } public string Value { get; set; } diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Models/XdiBatchFileRow.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Models/XdiBatchFileRow.cs index 5d70e4a..6db025c 100644 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Models/XdiBatchFileRow.cs +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Models/XdiBatchFileRow.cs @@ -13,7 +13,6 @@ public class XdiBatchFileRow switch (type) { case XdiFileType.UpdateMemberToPrint: - case XdiFileType.DeleteMember: return UserId + "|"; case XdiFileType.AddMemberElectronic: case XdiFileType.UpdateMemberEmail: case XdiFileType.UpdateMemberToElectronic: return UserId + "|" + Email + "|"; diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Program.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Program.cs index e29d330..c5547d8 100644 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Program.cs +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Program.cs @@ -1,31 +1,33 @@ -using LCU.Library.Internal.Logging.Models; -using LCU.Library.Internal.Logging; -using LCU.Library.Internal.ApiSecurity; -using LCU.Library.Internal.LcuHttpClient; -using LCU.Library.Internal.Status; -using LCU.Library.Internal.Configuration; -using LCU.Library.Internal.LcuMassTransit; -using LCU.Library.Internal.Logging.Middleware; -using LCU.API.Internal.MemberPreferencesApi.Consumers; -using LCU.API.Internal.MemberPreferencesApi.HostedServices; -using LCU.API.Internal.MemberPreferencesApiLib.Persistence; -using LCU.API.Internal.MemberPreferencesApi.Services.XdiServices; -using LCU.API.Internal.MemberPreferencesApi.Services.DnaAuditServices; -using LCU.API.Internal.MemberPreferencesApi.Interfaces; -using LCU.API.Internal.MemberPreferencesApi.Services.QueueServices; -using LCU.API.Internal.MemberPreferencesApi.MicroApiServices; -using LCU.API.Internal.MemberPreferencesApi.DataAccess; -using LCU.API.Internal.MemberPreferencesApi.Services; -using LCU.Library.Internal.MemberPreferencesApiModels.Models; -using LCU.API.Internal.MemberPreferencesApi.Models.EmailPolicies; -using LCU.API.Internal.MemberPreferencesApiLib.Repositories; -using LCU.Library.Internal.MemberPreferencesApiModels.Entities; -using LCU.Library.Internal.LcuMassTransitModels; using Infrastructure.Services; -using Microsoft.FeatureManagement; -using Microsoft.EntityFrameworkCore; -using Microsoft.OpenApi.Models; +using LCU.API.Internal.MemberPreferencesApi.Consumers; +using LCU.API.Internal.MemberPreferencesApi.DataAccess; +using LCU.API.Internal.MemberPreferencesApi.Interfaces; +using LCU.API.Internal.MemberPreferencesApi.MicroApiServices; +using LCU.API.Internal.MemberPreferencesApi.Models.EmailPolicies; +using LCU.API.Internal.MemberPreferencesApi.Services; +using LCU.API.Internal.MemberPreferencesApi.Services.DnaAuditServices; +using LCU.API.Internal.MemberPreferencesApi.Services.QueueServices; +using LCU.API.Internal.MemberPreferencesApi.Services.XdiServices; +using LCU.API.Internal.MemberPreferencesApiLib.Persistence; +using LCU.API.Internal.MemberPreferencesApiLib.Repositories; +using LCU.Library.Internal.ApiSecurity; +using LCU.Library.Internal.Configuration; +using LCU.Library.Internal.LcuClassPatterns.Crud; +using LCU.Library.Internal.LcuHttpClient; +using LCU.Library.Internal.LcuMassTransit; +using LCU.Library.Internal.LcuMassTransitModels; +using LCU.Library.Internal.LCUServiceFactory; +using LCU.Library.Internal.LCUServiceFactory.Configurations; +using LCU.Library.Internal.Logging; +using LCU.Library.Internal.Logging.Middleware; +using LCU.Library.Internal.Logging.Models; +using LCU.Library.Internal.MemberPreferencesApiModels.Entities; +using LCU.Library.Internal.MemberPreferencesApiModels.Models; +using LCU.Library.Internal.Status; using MassTransit; +using Microsoft.EntityFrameworkCore; +using Microsoft.FeatureManagement; +using Microsoft.OpenApi.Models; string MyAllowSpecificOrigins = "_myAllowSpecificOrigins"; @@ -37,11 +39,9 @@ BuildAppAndRun(builder); WebApplicationBuilder BuildBuilder(string[] args) { var builder = WebApplication.CreateBuilder(args); - builder.Configuration.AddJsonFile("/app/config/mapped-appsettings/primary.json", optional: true, reloadOnChange: true); + builder.Configuration.AddJsonFile("/app/config/environment-appsettings/appsettings.json", optional: true, reloadOnChange: true); + builder.Configuration.AddJsonFile("/app/config/workload-appsettings/appsettings.json", optional: true, reloadOnChange: true); builder.Configuration.AddJsonFile("/vault/secrets/member-preferences-api-member-preferences-api-key.json", optional: true, reloadOnChange: true); - builder.Configuration.AddJsonFile("/vault/secrets/member-preferences-api-ftp-fingerprint.json", optional: true, reloadOnChange: true); - builder.Configuration.AddJsonFile("/vault/secrets/member-preferences-api-ftp-password.json", optional: true, reloadOnChange: true); - builder.Configuration.AddJsonFile("/vault/secrets/member-preferences-api-ftp-username.json", optional: true, reloadOnChange: true); builder.Configuration.AddJsonFile("/vault/secrets/member-preferences-api-queue-password.json", optional: true, reloadOnChange: true); builder.Configuration.AddJsonFile("/vault/secrets/member-preferences-api-queue-username.json", optional: true, reloadOnChange: true); builder.Configuration.AddJsonFile("/vault/secrets/member-preferences-api-db-connection.json", optional: true, reloadOnChange: true); @@ -55,12 +55,12 @@ void BuildServicesAndConfigurations(WebApplicationBuilder builder) { var services = builder.Services; var configuration = builder.Configuration; + var servicesFactoryConfiguration = configuration.Bind(services); var apiConfiguration = configuration.Bind(services, "Primary"); - configuration.Bind(services); - configuration.Bind(services); + configuration.Bind(services); configuration.Bind(services); configuration.Bind(services); - configuration.Bind(services); + configuration.Bind(services); var loggerConfiguration = new LoggingConfiguration(apiConfiguration.AppName, apiConfiguration.SeqKey, @@ -82,10 +82,11 @@ void BuildServicesAndConfigurations(WebApplicationBuilder builder) services.AddHttpContextAccessor(); services.AddHttpClient(); + services.AddLcuCrudServices(); var databaseSettings = configuration.Bind(services, "SqlConnectionConfiguration"); - services.AddDbContext(options => + services.AddDbContextPool(options => { options.UseSqlServer ( @@ -94,6 +95,7 @@ void BuildServicesAndConfigurations(WebApplicationBuilder builder) ); }); + AddServiceFactoryServices(services); services.AddLCUStatusServicesWithApiHealthCheck(configuration); services.AddLCUHttpServices(); services.AddControllers(); @@ -103,12 +105,6 @@ void BuildServicesAndConfigurations(WebApplicationBuilder builder) c.SwaggerDoc("v1", new OpenApiInfo { Title = $"{apiConfiguration.AppName}", Version = "v1" }); }); - if (apiConfiguration.FeatureFlags.RunHostedServices) - { - services.AddHostedService(); - services.AddHostedService(); - } - services.AddFeatureManagement(configuration.GetSection("Primary:FeatureGates")); services.AddScoped(provider => provider.GetService()); @@ -122,13 +118,7 @@ void BuildServicesAndConfigurations(WebApplicationBuilder builder) { XdiBatchProcessEndpoint = MassTransitConfigurationSetUp.GetReceiveEndpointConfiguration(configuration, "XdiBatchProcessEndpoint"), - XdiBatchConfirmEndpoint = MassTransitConfigurationSetUp.GetReceiveEndpointConfiguration(configuration, "XdiBatchConfirmEndpoint"), - - DnaAccountAuditEndpoint = MassTransitConfigurationSetUp.GetReceiveEndpointConfiguration(configuration, "DnaAccountAuditEndpoint"), - - DnaAgreementAuditEndpoint = MassTransitConfigurationSetUp.GetReceiveEndpointConfiguration(configuration, "DnaAgreementAuditEndpoint"), - - DnaOrganizationAuditEndpoint = MassTransitConfigurationSetUp.GetReceiveEndpointConfiguration(configuration, "DnaOrganizationAuditEndpoint"), + DnaAuditProcessEndpoint = MassTransitConfigurationSetUp.GetReceiveEndpointConfiguration(configuration, "DnaAuditProcessEndpoint") }; services.AddSingleton(receiveEndpointConfigurations); @@ -137,6 +127,7 @@ void BuildServicesAndConfigurations(WebApplicationBuilder builder) AddMemberPreferencesApiServices(services); AddMemberPreferencesDaos(services); AddMemberPreferencesLib(ref services); + services.AddLCUServiceFactoryAndValidateServiceRegistration(servicesFactoryConfiguration); } void AddMassTransitServices(ref IServiceCollection services, @@ -147,10 +138,7 @@ void AddMassTransitServices(ref IServiceCollection services, services.AddMassTransit(x => { x.AddConsumer(); - x.AddConsumer(); - x.AddConsumer(); - x.AddConsumer(); - x.AddConsumer(); + x.AddConsumer(); x.UsingRabbitMq((context, cfg) => { @@ -170,43 +158,13 @@ void AddMassTransitServices(ref IServiceCollection services, }); } - if (configuration.FeatureFlags.RunXdiSshResponseConsumer) + if (configuration.FeatureFlags.RunDnaAuditProcessConsumer) { - cfg.ReceiveEndpoint(receiveEndpointConfigurations.XdiBatchConfirmEndpoint.ReceiveEndpoint, e => + cfg.ReceiveEndpoint(receiveEndpointConfigurations.DnaAuditProcessEndpoint.ReceiveEndpoint, e => { - e.ConfigureConsumer(context); + e.ConfigureConsumer(context); e.SetQuorumQueue(); - e.PrefetchCount = receiveEndpointConfigurations.XdiBatchConfirmEndpoint.PrefetchLimit; - }); - } - - if (configuration.FeatureFlags.RunAccountDnaFieldChangeConsumer) - { - cfg.ReceiveEndpoint(receiveEndpointConfigurations.DnaAccountAuditEndpoint.ReceiveEndpoint, e => - { - e.ConfigureConsumer(context); - e.SetQuorumQueue(); - e.PrefetchCount = receiveEndpointConfigurations.DnaAccountAuditEndpoint.PrefetchLimit; - }); - } - - if (configuration.FeatureFlags.RunAgreementDnaFieldChangeConsumer) - { - cfg.ReceiveEndpoint(receiveEndpointConfigurations.DnaAgreementAuditEndpoint.ReceiveEndpoint, e => - { - e.ConfigureConsumer(context); - e.SetQuorumQueue(); - e.PrefetchCount = receiveEndpointConfigurations.DnaAgreementAuditEndpoint.PrefetchLimit; - }); - } - - if (configuration.FeatureFlags.RunOrganizationDnaFieldChangeConsumer) - { - cfg.ReceiveEndpoint(receiveEndpointConfigurations.DnaOrganizationAuditEndpoint.ReceiveEndpoint, e => - { - e.ConfigureConsumer(context); - e.SetQuorumQueue(); - e.PrefetchCount = receiveEndpointConfigurations.DnaOrganizationAuditEndpoint.PrefetchLimit; + e.PrefetchCount = receiveEndpointConfigurations.DnaAuditProcessEndpoint.PrefetchLimit; }); } }); @@ -214,6 +172,13 @@ void AddMassTransitServices(ref IServiceCollection services, services.AddMassTransitHostedService(); } +void AddServiceFactoryServices(IServiceCollection services) +{ + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); +} + void AddMemberPreferencesApiServices(IServiceCollection services) { services.AddScoped(); @@ -230,7 +195,7 @@ void AddMemberPreferencesApiServices(IServiceCollection services) void AddDnaAuditServices(IServiceCollection services) { - services.AddScoped(); + services.AddScoped(); services.AddScoped(); } @@ -253,24 +218,24 @@ void AddEmailUndeliverableServices(IServiceCollection services) void AddQueueServices(IServiceCollection services) { - services.AddScoped(); - services.AddScoped(); - services.AddScoped(); - services.AddScoped(); + services.AddScoped(); + services.AddScoped(); } void AddMicroApiServices(IServiceCollection services) { services.AddScoped(); - services.AddScoped(); + services.AddScoped(); services.AddScoped(); + services.AddScoped(); } void AddMemberPreferencesDaos(IServiceCollection services) { services.AddScoped(); - services.AddScoped(); services.AddScoped(); + services.AddScoped(); + services.AddScoped(); } void AddMemberPreferencesLib(ref IServiceCollection services) @@ -280,6 +245,7 @@ void AddMemberPreferencesLib(ref IServiceCollection services) services.AddScoped(); services.AddScoped(); services.AddScoped(); + services.AddScoped(); services.AddScoped(); } diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/DnaAuditServices/DNAAuditCheckService.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/DnaAuditServices/DNAAuditCheckService.cs new file mode 100644 index 0000000..278b341 --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/DnaAuditServices/DNAAuditCheckService.cs @@ -0,0 +1,9 @@ +using LCU.Library.Internal.LCUServiceFactory.Configurations; +using LCU.Library.Internal.LCUServiceFactory.Services; + +namespace LCU.API.Internal.MemberPreferencesApi.Services.DnaAuditServices; + +public abstract class DNAAuditCheckService(ServicesFactoryConfiguration servicesFactoryConfiguration) + : LcuAbstractService(servicesFactoryConfiguration.GetServiceFactoryRegistrationByInterface()) +{ +} diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/DnaAuditServices/DNAAuditHelperService.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/DnaAuditServices/DNAAuditHelperService.cs new file mode 100644 index 0000000..df12ee8 --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/DnaAuditServices/DNAAuditHelperService.cs @@ -0,0 +1,78 @@ +using LCU.API.Internal.MemberPreferencesApi.MicroApiServices; +using LCU.Library.Internal.CoreApiWrapperModel.CoreModels.Agreements; +using LCU.Library.Internal.MemberPreferencesApiModels.Entities; + +namespace LCU.API.Internal.MemberPreferencesApi.Services.DnaAuditServices; + +public class DNAAuditHelperService : IDNAAuditHelperService +{ + private readonly ICoreApiWrapperService _coreApiWrapperService; + private readonly IOptinService _optinService; + + private const string MemberPreferencePrint = "PRNT"; + private const string MemberPreferenceElectronic = "WWW"; + + public DNAAuditHelperService(ICoreApiWrapperService coreApiWrapperService, IOptinService optinService) + { + _optinService = optinService; + _coreApiWrapperService = coreApiWrapperService; + } + + public async Task UpdateAccountDeliveryMethodIfNotEqualToMemberPreference(AgreementAccount account) + { + try + { + if (account.AccountOwner?.UserId == null) + { + await _coreApiWrapperService.UpdateAgreementAccountsDeliveryMethod(new List { account.AccountNumber }, "PRNT", "None Found During Audit"); + return; + } + + var currentAccountDeliveryMethod = account.OvrDeliveryMethCD; + + var memberOptinSettings = await _optinService.GetMemberOptInSettings(account.AccountOwner.UserId); + var memberPreferenceDeliveryMethod = DetermineMemberPreference(memberOptinSettings); + + if (!string.Equals(currentAccountDeliveryMethod, memberPreferenceDeliveryMethod, StringComparison.InvariantCultureIgnoreCase)) + { + await _coreApiWrapperService.UpdateAgreementAccountsDeliveryMethod(new List { account.AccountNumber }, memberPreferenceDeliveryMethod, account.AccountOwner.UserId); + } + } + catch (Exception ex) + { + var error = $"Failed to UpdateAccountDeliveryMethodIfNotEqualToMemberPreference for account number: {account.AccountNumber}"; + Log.Error(ex, error); + throw new ServiceException(error); + } + } + + private string DetermineMemberPreference(MemberOptInSettings optinSettings) + { + if (optinSettings == null) + { + return MemberPreferencePrint; + } + + if (optinSettings.IsUnifiedElectronicEnrolled()) + { + return MemberPreferenceElectronic; + } + + if (optinSettings.IsUnifiedPaperEnrolled()) + { + return MemberPreferencePrint; + } + + if (string.Equals(optinSettings.EStatements, "Paper", StringComparison.InvariantCultureIgnoreCase)) + { + return MemberPreferencePrint; + } + + if (string.Equals(optinSettings.EStatements, "Electronic", StringComparison.InvariantCultureIgnoreCase)) + { + return MemberPreferenceElectronic; + } + + return MemberPreferencePrint; + } +} diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/DnaAuditServices/DNADataAccountAuditCheckService.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/DnaAuditServices/DNADataAccountAuditCheckService.cs new file mode 100644 index 0000000..a3b8f11 --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/DnaAuditServices/DNADataAccountAuditCheckService.cs @@ -0,0 +1,75 @@ +using LCU.API.Internal.MemberPreferencesApi.MicroApiServices; +using LCU.Library.Internal.LCUServiceFactory.Configurations; +using LCU.Library.Internal.MemberPreferencesApiModels.Entities; +using LCU.Library.Internal.MemberPreferencesApiModels.Responses; + +namespace LCU.API.Internal.MemberPreferencesApi.Services.DnaAuditServices; + +public class DNADataAccountAuditCheckService : DNAAuditCheckService, IDNAAuditCheckService +{ + + private readonly ICoreApiWrapperService _coreApiWrapperService; + private readonly IDNAAuditHelperService _auditHelperService; + public DNADataAccountAuditCheckService(ServicesFactoryConfiguration servicesFactoryConfiguration, + ICoreApiWrapperService coreApiWrapperService, + IDNAAuditHelperService auditHelperService) + : base(servicesFactoryConfiguration) + { + _coreApiWrapperService = coreApiWrapperService; + _auditHelperService = auditHelperService; + } + + public async Task ProcessRequest(DnaAuditProcessRequest request, DnaAuditProcess dnaAuditProcess) + { + try + { + var accountAuditRecords = await AuditDNAAccountsForTimePeriod(dnaAuditProcess.LastUpdated.AddMinutes(request.LookBackMinutes)); + + await HandleAccountAuditCheck(accountAuditRecords); + + return new RequestResponse(request, true, new List() { $"DNAAccountAudit ran successfully for {accountAuditRecords.Count} records" }); + } + catch (Exception ex) + { + var error = $"Failure During ProcessRequest in DNADataAccountAuditCheckService. Exception Message: {ex.Message}"; + return new RequestResponse(request, false, new List() { error }); + } + } + + public async Task HandleAccountAuditCheck(List accountAuditRecords) + { + try + { + foreach (var record in accountAuditRecords) + { + var account = await _coreApiWrapperService.GetAgreementAccountByAccountId(record); + + if (account == null) + { + Log.Information($"During audit process account with ID: {record} could not be found, and will not be processed."); + continue; + } + + await _auditHelperService.UpdateAccountDeliveryMethodIfNotEqualToMemberPreference(account); + } + } + catch (Exception ex) + { + Log.Error(ex, $"Failed to process DNA Audit for member preferences Account."); + throw new ServiceException(ex.Message); + } + } + + public async Task> AuditDNAAccountsForTimePeriod(DateTime timeToSearchFrom) + { + try + { + var dnaAccountAuditRecords = await _coreApiWrapperService.GetAuditAccountsFromDateLastMaintained(timeToSearchFrom); + return dnaAccountAuditRecords.ToList(); + } + catch (Exception ex) + { + throw new ServiceException(ex.Message); + } + } +} diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/DnaAuditServices/DNADataAgreementAuditCheckService.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/DnaAuditServices/DNADataAgreementAuditCheckService.cs new file mode 100644 index 0000000..69c2a2a --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/DnaAuditServices/DNADataAgreementAuditCheckService.cs @@ -0,0 +1,90 @@ +using LCU.API.Internal.MemberPreferencesApi.MicroApiServices; +using LCU.Library.Internal.CoreApiWrapperModel.CoreModels.Agreements; +using LCU.Library.Internal.LCUServiceFactory.Configurations; +using LCU.Library.Internal.MemberPreferencesApiModels.Entities; +using LCU.Library.Internal.MemberPreferencesApiModels.Responses; + +namespace LCU.API.Internal.MemberPreferencesApi.Services.DnaAuditServices; + +public class DNADataAgreementAuditCheckService : DNAAuditCheckService, IDNAAuditCheckService +{ + private readonly ICoreApiWrapperService _coreApiWrapperService; + private readonly IDNAAuditHelperService _auditHelperService; + public DNADataAgreementAuditCheckService(ServicesFactoryConfiguration servicesFactoryConfiguration, + ICoreApiWrapperService coreApiWrapperService, + IDNAAuditHelperService auditHelperService) + : base(servicesFactoryConfiguration) + { + _coreApiWrapperService = coreApiWrapperService; + _auditHelperService = auditHelperService; + } + + public async Task ProcessRequest(DnaAuditProcessRequest request, DnaAuditProcess dnaAuditProcess) + { + try + { + var agreementAuditRecords = await AuditDNAAgreementForTimePeriod(dnaAuditProcess.LastUpdated.AddMinutes(request.LookBackMinutes)); + + await HandleAgreementAuditCheck(agreementAuditRecords); + + return new RequestResponse(request, true, new List() { $"DNAAgreementAudit ran successfully for {agreementAuditRecords.Count} records" }); + } + catch (Exception ex) + { + var error = $"Failure During ProcessRequest in DNADataAgreementAuditCheckService. Exception Message: {ex.Message}"; + return new RequestResponse(request, false, new List() { error }); + } + } + + public async Task HandleAgreementAuditCheck(List agreementAuditRecords) + { + try + { + foreach (var record in agreementAuditRecords) + { + var agreement = await _coreApiWrapperService.GetAgreementByAgreementId(record); + + if (agreement == null) + { + Log.Information($"During audit process agreement with ID: {record} could not be found, and will not be processed."); + continue; + } + + IEnumerable agreementAccounts; + + if (agreement.ByOrgNbr != 0) + { + agreementAccounts = await _coreApiWrapperService.GetAgreementAccountsByOrganizationId(agreement.ByOrgNbr); + } + else + { + agreementAccounts = await _coreApiWrapperService.GetAgreementAccountsByUserId(agreement.UserId); + agreementAccounts = agreementAccounts.Where(account => account.TaxReportForPersonNumber != null && account.AccountOwner.AgreementNumber == agreement.AgreementNumber); + } + + foreach (var agreementAccount in agreementAccounts) + { + await _auditHelperService.UpdateAccountDeliveryMethodIfNotEqualToMemberPreference(agreementAccount); + } + } + } + catch (Exception ex) + { + Log.Error(ex, $"Failed to process DNA Audit for member preferences Agreement."); + throw new ServiceException(ex.Message); + } + } + + public async Task> AuditDNAAgreementForTimePeriod(DateTime timeToSearchFrom) + { + try + { + var dnaAgreementAuditRecords = await _coreApiWrapperService.GetAuditAgreementFromDateLastMaintained(timeToSearchFrom); + return dnaAgreementAuditRecords.ToList(); + } + catch (Exception ex) + { + throw new ServiceException(ex.Message); + } + } +} diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/DnaAuditServices/DNADataAuditProcessService.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/DnaAuditServices/DNADataAuditProcessService.cs index 9317a95..0c13ac2 100644 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/DnaAuditServices/DNADataAuditProcessService.cs +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/DnaAuditServices/DNADataAuditProcessService.cs @@ -1,9 +1,10 @@ using LCU.API.Internal.MemberPreferencesApi.Interfaces; using LCU.API.Internal.MemberPreferencesApi.MicroApiServices; -using LCU.API.Internal.MemberPreferencesApi.Services.QueueServices; using LCU.API.Internal.MemberPreferencesApiLib.Repositories; +using LCU.Library.Internal.ApiResponse.Services; +using LCU.Library.Internal.LCUServiceFactory.Services; using LCU.Library.Internal.MemberPreferencesApiModels.Entities; -using LCU.Library.Internal.MemberPreferencesApiModels.Enums; +using LCU.Library.Internal.MemberPreferencesApiModels.Responses; namespace LCU.API.Internal.MemberPreferencesApi.Services.DnaAuditServices; @@ -11,135 +12,86 @@ public class DNADataAuditProcessService : IDNADataAuditProcessService { private readonly IDateTime _dateTime; private readonly ICoreApiWrapperService _coreApiWrapperService; + private readonly IScanBiCoreApiWrapperService _scanBiCoreApiWrapperService; private readonly IDnaAuditProcessRepository _dnaAuditProcessRepository; - private readonly DnaAuditProcessConfiguration _dnaAuditProcessConfig; - private readonly IQueueDnaAccountAuditService _queueDnaAccountAuditService; - private readonly IQueueDnaAgreementAuditService _queueDnaAgreementAuditService; - private readonly IQueueDnaOrganizationAuditService _queueDnaOrganizationAuditService; + private readonly ILcuServiceFactory _lcuServiceFactory; - public DNADataAuditProcessService(IQueueDnaAccountAuditService queueDnaAccountAuditService, - IQueueDnaAgreementAuditService queueDnaAgreementAuditService, - IQueueDnaOrganizationAuditService queueDnaOrganizationAuditService, - ICoreApiWrapperService coreApiWrapperService, IDateTime dateTime, - IDnaAuditProcessRepository dnaAuditProcessRepository, DnaAuditProcessConfiguration dnaAuditProcessConfig) + public DNADataAuditProcessService(ICoreApiWrapperService coreApiWrapperService, + IScanBiCoreApiWrapperService scanBiCoreApiWrapperService, + IDateTime dateTime, + IDnaAuditProcessRepository dnaAuditProcessRepository, + ILcuServiceFactory lcuServiceFactory) { - _queueDnaAccountAuditService = queueDnaAccountAuditService; - _queueDnaAgreementAuditService = queueDnaAgreementAuditService; - _queueDnaOrganizationAuditService = queueDnaOrganizationAuditService; _coreApiWrapperService = coreApiWrapperService; + _scanBiCoreApiWrapperService = scanBiCoreApiWrapperService; _dateTime = dateTime; _dnaAuditProcessRepository = dnaAuditProcessRepository; - _dnaAuditProcessConfig = dnaAuditProcessConfig; + _lcuServiceFactory = lcuServiceFactory; } - public async Task RunDataAuditProcesses() + public async Task HandleDnaAuditProcessRequest(DnaAuditProcessRequest request) { try { - var dnaProcesses = await _dnaAuditProcessRepository.GetAllDnaAuditProcesses(); - - foreach (var dnaProcess in dnaProcesses) + var dnaAuditProcess = await _dnaAuditProcessRepository.GetDnaAuditProcessByDnaProcessType(request.DnaAuditProcessType); + if (dnaAuditProcess == null) { - var timeToSearchFrom = dnaProcess.LastUpdated.AddMinutes(_dnaAuditProcessConfig.LookBackMinutes); - - switch (dnaProcess.DnaProcessType) - { - case DnaAuditProcessType.DNAOrganization: - await AuditDNAOrganizationForTimePeriod(timeToSearchFrom, dnaProcess); - break; - case DnaAuditProcessType.DNAAgreement: - await AuditDNAAgreementForTimePeriod(timeToSearchFrom, dnaProcess); - break; - case DnaAuditProcessType.DNAAccounts: - await AuditDNAAccountsForTimePeriod(timeToSearchFrom, dnaProcess); - break; - default: - Log.ForContext(Enum.GetName(typeof(PropertyEnum), PropertyEnum.Group), - Enum.GetName(typeof(GroupEnum), GroupEnum.ITDevelopment)) - .Error($"DnaAuditProcessType not found for ProcessId: {dnaProcess.ProcessId}. ProcessType: {dnaProcess.DnaProcessType}"); - break; - } + throw new Exception($"DnaAuditProcess not found for requested type: {request.DnaAuditProcessType.ToString()}"); } + + var result = await PerformDNAAuditCheck(request, dnaAuditProcess); + // Return successful as True so Dispatcher job never stops running. + result.IsSuccessful = true; + + await QueueReturnResponse.QueueResponse(request, result.IsSuccessful, result.MessageStack); } catch (Exception ex) { - Log.ForContext(Enum.GetName(typeof(PropertyEnum), PropertyEnum.Group), Enum.GetName(typeof(GroupEnum), GroupEnum.ITDevelopment)) - .Error(ex, "Failed to Queue Last 5 Minutes of MemberPreference DNA DataAudit Activity"); + Log.Error(ex.Message); + // Return successful as True so Dispatcher job never stops running. + await QueueReturnResponse.QueueResponse(request, true, new List() { ex.Message }); + throw new ServiceException($"Failed to handled Consumed DnaAuditProcessRequest. ExceptionMessage: {ex.Message}"); } } - public async Task AuditDNAOrganizationForTimePeriod(DateTime timeToSearchFrom, DnaAuditProcess dnaProcess) + public async Task PerformDNAAuditCheck(DnaAuditProcessRequest request, DnaAuditProcess dnaAuditProcess) { + var requestResponse = new RequestResponse(request); try { - var dnaOrganizationAuditRecords = await _coreApiWrapperService.GetAuditOrganizationFromDateLastMaintained(timeToSearchFrom); - var organizationAuditRecords = dnaOrganizationAuditRecords.ToList(); - await _queueDnaOrganizationAuditService.QueueDataAuditForOrganizations(organizationAuditRecords, dnaProcess.ConsecutiveFailures); + var dnaAuditCheckService = _lcuServiceFactory.GetService(request.DnaAuditProcessType); - Log.Information($"Queued {organizationAuditRecords.Count} DataAudit Organization Changes Since Last DNADataAuditProducerService Run."); - dnaProcess = HandleDnaAuditProcessSuccess(dnaProcess); + requestResponse = await dnaAuditCheckService.ProcessRequest(request, dnaAuditProcess); } catch (Exception ex) { - dnaProcess = HandleDnaAuditProcessException(dnaProcess, ex); + var failureMessage = $"Failed to perform DNA Data Audit Process. Exception Message: {ex.Message}"; + Log.Error(failureMessage); + requestResponse.MessageStack.Add(failureMessage); + requestResponse.IsSuccessful = false; } - await _dnaAuditProcessRepository.Update(dnaProcess); + await _dnaAuditProcessRepository.Update(requestResponse.IsSuccessful ? + HandleDnaAuditProcessSuccess(dnaAuditProcess) : + HandleDnaAuditProcessException(dnaAuditProcess, request)); + return requestResponse; } - public async Task AuditDNAAgreementForTimePeriod(DateTime timeToSearchFrom, DnaAuditProcess dnaProcess) - { - try - { - var dnaAgreementAuditRecords = await _coreApiWrapperService.GetAuditAgreementFromDateLastMaintained(timeToSearchFrom); - var agreementAuditRecords = dnaAgreementAuditRecords.ToList(); - await _queueDnaAgreementAuditService.QueueDataAuditForAgreements(agreementAuditRecords, dnaProcess.ConsecutiveFailures); - - Log.Information($"Queued {agreementAuditRecords.Count} DataAudit Agreement Changes Since Last DNADataAuditProducerService Run."); - dnaProcess = HandleDnaAuditProcessSuccess(dnaProcess); - } - catch (Exception ex) - { - dnaProcess = HandleDnaAuditProcessException(dnaProcess, ex); - } - - await _dnaAuditProcessRepository.Update(dnaProcess); - } - - public async Task AuditDNAAccountsForTimePeriod(DateTime timeToSearchFrom, DnaAuditProcess dnaProcess) - { - try - { - var dnaAccountAuditRecords = await _coreApiWrapperService.GetAuditAccountsFromDateLastMaintained(timeToSearchFrom); - var accountAuditRecords = dnaAccountAuditRecords.ToList(); - await _queueDnaAccountAuditService.QueueDataAuditForAccounts(accountAuditRecords, dnaProcess.ConsecutiveFailures); - - Log.Information($"Queued {accountAuditRecords.Count} DataAudit Account Changes Since Last DNADataAuditProducerService Run."); - dnaProcess = HandleDnaAuditProcessSuccess(dnaProcess); - } - catch (Exception ex) - { - dnaProcess = HandleDnaAuditProcessException(dnaProcess, ex); - } - - await _dnaAuditProcessRepository.Update(dnaProcess); - } - - public DnaAuditProcess HandleDnaAuditProcessException(DnaAuditProcess process, Exception ex) + public DnaAuditProcess HandleDnaAuditProcessException(DnaAuditProcess process, DnaAuditProcessRequest request) { process.ConsecutiveFailures++; - if (process.ConsecutiveFailures >= _dnaAuditProcessConfig.NumberOfAllowedConsecutiveFailures) + if (process.ConsecutiveFailures >= request.NumberOfAllowedConsecutiveFailures) { Log.ForContext(Enum.GetName(typeof(PropertyEnum), PropertyEnum.Group), Enum.GetName(typeof(GroupEnum), GroupEnum.ITDevelopment)) .Error($"DnaAuditProcess for {process.DnaProcessType} has failed {process.ConsecutiveFailures} consecutive times. " + - $"Last succesful runtime: {process.LastUpdated} CST. " + - $"This process needs to checked on to determine why failure is occuring."); + $"Last successful runtime: {process.LastUpdated} CST. " + + $"This process needs to be checked on to determine why failure is occurring."); } else { - Log.Warning($"Exception and Failure occured for DnaAuditProcess: {process.DnaProcessType}. ConsecutiveFailures: {process.ConsecutiveFailures}. " + - $"Last succesful runtime: {process.LastUpdated} CST. Exception: {ex}"); + Log.Warning($"Exception and Failure occurred for DnaAuditProcess: {process.DnaProcessType}. ConsecutiveFailures: {process.ConsecutiveFailures}. " + + $"Last successful runtime: {process.LastUpdated} CST."); } return process; diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/DnaAuditServices/DNADataAuditService.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/DnaAuditServices/DNADataAuditService.cs deleted file mode 100644 index 1e4c899..0000000 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/DnaAuditServices/DNADataAuditService.cs +++ /dev/null @@ -1,161 +0,0 @@ -using LCU.API.Internal.MemberPreferencesApi.MicroApiServices; -using LCU.Library.Internal.CoreApiWrapperModel.CoreModels.Agreements; -using LCU.Library.Internal.MemberPreferencesApiModels.Entities; - -namespace LCU.API.Internal.MemberPreferencesApi.Services.DnaAuditServices; - -public class DNADataAuditService : IDNADataAuditService -{ - private readonly ICoreApiWrapperService _coreApiWrapperService; - private readonly IOptinService _optinService; - - private const string MemberPreferencePrint = "PRNT"; - private const string MemberPreferenceElectronic = "WWW"; - - public DNADataAuditService(ICoreApiWrapperService coreApiWrapperService, IOptinService optinService) - { - _optinService = optinService; - _coreApiWrapperService = coreApiWrapperService; - } - - public async Task HandleAccountAuditCheck(DnaFieldChangeRequest request) - { - try - { - var accountNumber = request.DnaFieldIdInformation; - var account = await _coreApiWrapperService.GetAgreementAccountByAccountId(accountNumber); - - if (account == null) - { - Log.Information($"During audit process account with ID: {accountNumber} could not be found, and will not be processed."); - return; - } - - await UpdateAccountDeliveryMethodIfNotEqualToMemberPreference(account); - } - catch (Exception ex) - { - Log.Error(ex, - $"Failed to process DNA Audit for member preferences Account."); - } - } - - public async Task HandleAgreementAuditCheck(DnaFieldChangeRequest request) - { - try - { - var agreementNumber = request.DnaFieldIdInformation; - var agreement = await _coreApiWrapperService.GetAgreementByAgreementId(agreementNumber); - - if (agreement == null) - { - Log.Information($"During audit process agreement with ID: {agreementNumber} could not be found, and will not be processed."); - return; - } - - IEnumerable agreementAccounts; - - if (agreement.ByOrgNbr != 0) - { - agreementAccounts = await _coreApiWrapperService.GetAgreementAccountsByOrganizationId(agreement.ByOrgNbr); - } - else - { - agreementAccounts = await _coreApiWrapperService.GetAgreementAccountsByUserId(agreement.UserId); - agreementAccounts = agreementAccounts.Where(account => account.TaxReportForPersonNumber != null && account.AccountOwner.AgreementNumber == agreement.AgreementNumber); - } - - foreach (var agreementAccount in agreementAccounts) - { - await UpdateAccountDeliveryMethodIfNotEqualToMemberPreference(agreementAccount); - } - } - catch (Exception ex) - { - Log.Error(ex, - $"Failed to process DNA Audit for member preferences Agreement."); - } - } - - public async Task HandleOrganizationAuditCheck(DnaFieldChangeRequest request) - { - try - { - var organizationId = request.DnaFieldIdInformation; - var organizationAccounts = await _coreApiWrapperService.GetAgreementAccountsByOrganizationId(organizationId); - - if (organizationAccounts == null) - { - Log.Information($"During audit process organization with ID: {organizationId} could not be found, and will not be processed."); - return; - } - - foreach (var account in organizationAccounts) - { - await UpdateAccountDeliveryMethodIfNotEqualToMemberPreference(account); - } - } - catch (Exception ex) - { - Log.Error(ex, - $"Failed to process DNA Audit for member preferences Organization."); - } - } - - private async Task UpdateAccountDeliveryMethodIfNotEqualToMemberPreference(AgreementAccount account) - { - try - { - if (account.AccountOwner?.UserId == null) - { - await _coreApiWrapperService.UpdateAgreementAccountsDeliveryMethod(new List { account.AccountNumber }, "PRNT", "None Found During Audit"); - return; - } - - var currentAccountDeliveryMethod = account.OvrDeliveryMethCD; - - var memberOptinSettings = await _optinService.GetMemberOptInSettings(account.AccountOwner.UserId); - var memberPreferenceDeliveryMethod = DetermineMemberPreference(memberOptinSettings); - - if (!string.Equals(currentAccountDeliveryMethod, memberPreferenceDeliveryMethod, StringComparison.InvariantCultureIgnoreCase)) - { - await _coreApiWrapperService.UpdateAgreementAccountsDeliveryMethod(new List { account.AccountNumber }, memberPreferenceDeliveryMethod, account.AccountOwner.UserId); - } - } - catch (Exception ex) - { - Log.Error(ex, $"Failed to UpdateAccountDeliveryMethodIfNotEqualToMemberPreference for account number: {account.AccountNumber}"); - } - } - - private string DetermineMemberPreference(MemberOptInSettings optinSettings) - { - if (optinSettings == null) - { - return MemberPreferencePrint; - } - - if (optinSettings.IsUnifiedElectronicEnrolled()) - { - return MemberPreferenceElectronic; - } - - if (optinSettings.IsUnifiedPaperEnrolled()) - { - return MemberPreferencePrint; - } - - if (string.Equals(optinSettings.EStatements, "Paper", StringComparison.InvariantCultureIgnoreCase)) - { - return MemberPreferencePrint; - } - - if (string.Equals(optinSettings.EStatements, "Electronic", StringComparison.InvariantCultureIgnoreCase)) - { - return MemberPreferenceElectronic; - } - - return MemberPreferencePrint; - } -} - diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/DnaAuditServices/DNADataOrganizationAuditService.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/DnaAuditServices/DNADataOrganizationAuditService.cs new file mode 100644 index 0000000..13db649 --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/DnaAuditServices/DNADataOrganizationAuditService.cs @@ -0,0 +1,87 @@ +using LCU.API.Internal.MemberPreferencesApi.MicroApiServices; +using LCU.API.Internal.MemberPreferencesApi.Services.QueueServices; +using LCU.Library.Internal.LCUServiceFactory.Configurations; +using LCU.Library.Internal.MemberPreferencesApiModels.Entities; +using LCU.Library.Internal.MemberPreferencesApiModels.Responses; +using Microsoft.Extensions.DependencyInjection; + +namespace LCU.API.Internal.MemberPreferencesApi.Services.DnaAuditServices; + +public class DNADataOrganizationAuditService : DNAAuditCheckService, IDNAAuditCheckService +{ + private readonly IScanBiCoreApiWrapperService _scanBiCoreApiWrapperService; + private readonly ICoreApiWrapperService _coreApiWrapperService; + private readonly IServiceScopeFactory _serviceScopeFactory; + private readonly IDNAAuditHelperService _auditHelperService; + + public DNADataOrganizationAuditService(ServicesFactoryConfiguration servicesFactoryConfiguration, + ICoreApiWrapperService coreApiWrapperService, + IScanBiCoreApiWrapperService scanBiCoreApiWrapperService, + IServiceScopeFactory serviceScopeFactory, + IDNAAuditHelperService auditHelperService) + : base(servicesFactoryConfiguration) + { + _serviceScopeFactory = serviceScopeFactory; + _coreApiWrapperService = coreApiWrapperService; + _scanBiCoreApiWrapperService = scanBiCoreApiWrapperService; + _auditHelperService = auditHelperService; + } + + public async Task ProcessRequest(DnaAuditProcessRequest request, DnaAuditProcess dnaAuditProcess) + { + try + { + var organizationAuditRecords = await AuditDNAOrganizationForTimePeriod(dnaAuditProcess.LastUpdated.AddMinutes(request.LookBackMinutes)); + + await HandleOrganizationAuditCheck(organizationAuditRecords); + + return new RequestResponse(request, true, new List() { $"DNAOrganizationAudit ran successfully for {organizationAuditRecords.Count} records" }); + } + catch (Exception ex) + { + var error = $"Failure During ProcessRequest in DNADataOrganizationAuditService. Exception Message: {ex.Message}"; + return new RequestResponse(request, false, new List() { error }); + } + } + + public async Task HandleOrganizationAuditCheck(List organizationAuditRecords) + { + try + { + foreach (var record in organizationAuditRecords) + { + var organizationAccounts = await _coreApiWrapperService.GetAgreementAccountsByOrganizationId(record); + var organizationAccountsList = organizationAccounts.ToList(); + + if (organizationAccountsList == null) + { + Log.Information($"During audit process organization with ID: {record} could not be found, and will not be processed."); + continue; + } + + foreach (var account in organizationAccountsList) + { + await _auditHelperService.UpdateAccountDeliveryMethodIfNotEqualToMemberPreference(account); + } + } + } + catch (Exception ex) + { + Log.Error(ex, $"Failed to process DNA Audit for member preferences Organization."); + throw new ServiceException($"Failure in DNADataOrganizationAuditService HandleOrganizationAuditCheck. ExceptionMessage: {ex.Message}"); + } + } + + public async Task> AuditDNAOrganizationForTimePeriod(DateTime timeToSearchFrom) + { + try + { + var dnaOrganizationAuditRecords = await _scanBiCoreApiWrapperService.GetAuditOrganizationFromDateLastMaintained(timeToSearchFrom); + return dnaOrganizationAuditRecords.ToList(); + } + catch (Exception ex) + { + throw new ServiceException(ex.Message); + } + } +} diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/DnaAuditServices/IDNAAuditCheckService.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/DnaAuditServices/IDNAAuditCheckService.cs new file mode 100644 index 0000000..317efbd --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/DnaAuditServices/IDNAAuditCheckService.cs @@ -0,0 +1,10 @@ +using LCU.Library.Internal.LCUServiceFactory.Services; +using LCU.Library.Internal.MemberPreferencesApiModels.Entities; +using LCU.Library.Internal.MemberPreferencesApiModels.Responses; + +namespace LCU.API.Internal.MemberPreferencesApi.Services.DnaAuditServices; + +public interface IDNAAuditCheckService : ILcuService +{ + Task ProcessRequest(DnaAuditProcessRequest request, DnaAuditProcess dnaAuditProcess); +} diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/DnaAuditServices/IDNAAuditHelperService.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/DnaAuditServices/IDNAAuditHelperService.cs new file mode 100644 index 0000000..238d167 --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/DnaAuditServices/IDNAAuditHelperService.cs @@ -0,0 +1,8 @@ +using LCU.Library.Internal.CoreApiWrapperModel.CoreModels.Agreements; + +namespace LCU.API.Internal.MemberPreferencesApi.Services.DnaAuditServices; + +public interface IDNAAuditHelperService +{ + Task UpdateAccountDeliveryMethodIfNotEqualToMemberPreference(AgreementAccount account); +} diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/DnaAuditServices/IDNADataAuditProcessService.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/DnaAuditServices/IDNADataAuditProcessService.cs index 92ad9d6..eec6a5f 100644 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/DnaAuditServices/IDNADataAuditProcessService.cs +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/DnaAuditServices/IDNADataAuditProcessService.cs @@ -4,8 +4,5 @@ namespace LCU.API.Internal.MemberPreferencesApi.Services.DnaAuditServices; public interface IDNADataAuditProcessService { - Task RunDataAuditProcesses(); - Task AuditDNAOrganizationForTimePeriod(DateTime timeToSearchFrom, DnaAuditProcess dnaProcess); - Task AuditDNAAgreementForTimePeriod(DateTime timeToSearchFrom, DnaAuditProcess dnaProcess); - Task AuditDNAAccountsForTimePeriod(DateTime timeToSearchFrom, DnaAuditProcess dnaProcess); + Task HandleDnaAuditProcessRequest(DnaAuditProcessRequest request); } diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/DnaAuditServices/IDNADataAuditService.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/DnaAuditServices/IDNADataAuditService.cs deleted file mode 100644 index 51bc061..0000000 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/DnaAuditServices/IDNADataAuditService.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace LCU.API.Internal.MemberPreferencesApi.Services.DnaAuditServices; - -public interface IDNADataAuditService -{ - Task HandleAccountAuditCheck(DnaFieldChangeRequest dnaFieldChange); - Task HandleAgreementAuditCheck(DnaFieldChangeRequest dnaFieldChange); - Task HandleOrganizationAuditCheck(DnaFieldChangeRequest dnaFieldChange); -} diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/HostedServices/HostedDnaDataAuditProcessService.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/HostedServices/HostedDnaDataAuditProcessService.cs deleted file mode 100644 index 3e38ae1..0000000 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/HostedServices/HostedDnaDataAuditProcessService.cs +++ /dev/null @@ -1,56 +0,0 @@ -using LCU.API.Internal.MemberPreferencesApi.Services.DnaAuditServices; -using NCrontab; - -namespace LCU.API.Internal.MemberPreferencesApi.HostedServices -{ - public class HostedDnaDataAuditProcessService : BackgroundService - { - private readonly IServiceScopeFactory _scopeFactory; - private CancellationToken _cancellationToken; - private ApiConfiguration _memberPreferencesConfig; - private readonly CrontabSchedule _cleanUpJobSchedule; - private DateTime _nextScheduleRun; - - public HostedDnaDataAuditProcessService(ApiConfiguration appConfig, - IServiceScopeFactory scopeFactory) - { - _scopeFactory = scopeFactory; - _memberPreferencesConfig = appConfig; - _cleanUpJobSchedule = CrontabSchedule.Parse(_memberPreferencesConfig.DnaDataAuditProcessCronSchedule); - _nextScheduleRun = _cleanUpJobSchedule.GetNextOccurrence(DateTime.Now); - _cancellationToken = new CancellationToken(); - } - - protected override async Task ExecuteAsync(CancellationToken cancellationToken) - { - Log.Information("Hosted DNADataAuditProcessService is starting, for DNA Member Preferences Audit."); - _cancellationToken = cancellationToken; - try - { - while (!cancellationToken.IsCancellationRequested) - { - if (DateTime.Now > _nextScheduleRun) - { - using (var scope = _scopeFactory.CreateScope()) - { - await scope.ServiceProvider.GetRequiredService().RunDataAuditProcesses(); - } - } - await Task.Delay(UntilNextExecution(), cancellationToken); - } - } - catch (TaskCanceledException ex) when (cancellationToken.IsCancellationRequested) - { - Log.Information(ex, "Hosted DnaDataAuditProcessService was shut down normally."); - } - catch (Exception ex) - { - Log.Error(ex, "Error in main thread for DnaDataAuditProcessService"); - } - - Log.Information("Hosted DnaDataAuditProcessService is stopping."); - } - - private int UntilNextExecution() => Math.Max(0, (int)_nextScheduleRun.Subtract(DateTime.Now).TotalMilliseconds); - } -} diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/HostedServices/HostedXdiBatchProcessService.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/HostedServices/HostedXdiBatchProcessService.cs deleted file mode 100644 index aed2e2a..0000000 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/HostedServices/HostedXdiBatchProcessService.cs +++ /dev/null @@ -1,57 +0,0 @@ -using LCU.API.Internal.MemberPreferencesApi.Services.XdiServices; -using NCrontab; - -namespace LCU.API.Internal.MemberPreferencesApi.HostedServices; - -public class HostedXdiBatchProcessService : BackgroundService -{ - private readonly IServiceScopeFactory _scopeFactory; - private CancellationToken _cancellationToken; - private ApiConfiguration _apiConfiguration; - private XdiSftpApiConfiguration _xdiSftpApiConfiguration; - private readonly CrontabSchedule _cleanUpJobSchedule; - private DateTime _nextScheduleRun; - - public HostedXdiBatchProcessService(ApiConfiguration apiConfiguration, XdiSftpApiConfiguration xdiSftpApiConfiguration, IServiceScopeFactory scopeFactory) - { - _scopeFactory = scopeFactory; - _apiConfiguration = apiConfiguration; - _xdiSftpApiConfiguration = xdiSftpApiConfiguration; - _cleanUpJobSchedule = CrontabSchedule.Parse(_apiConfiguration.XdiBatchProcessCronSchedule); - _nextScheduleRun = _cleanUpJobSchedule.GetNextOccurrence(DateTime.Now); - _cancellationToken = new CancellationToken(); - } - - protected override async Task ExecuteAsync(CancellationToken cancellationToken) - { - Log.Information("Hosted XDI Batch Service is starting"); - _cancellationToken = cancellationToken; - try - { - while (!cancellationToken.IsCancellationRequested) - { - if (DateTime.Now > _nextScheduleRun) - { - using (var scope = _scopeFactory.CreateScope()) - { - await scope.ServiceProvider.GetRequiredService().RunXdiBatchProcess(_xdiSftpApiConfiguration.SftpRootBasePath); - } - _nextScheduleRun = _cleanUpJobSchedule.GetNextOccurrence(DateTime.Now); - } - await Task.Delay(UntilNextExecution(), cancellationToken); - } - } - catch (TaskCanceledException ex) when (cancellationToken.IsCancellationRequested) - { - Log.Information(ex, "Hosted XdiBatchService was shut down normally"); - } - catch (Exception ex) - { - Log.Error(ex, "Error in main thread for XdiBatchService"); - } - - Log.Information("Hosted XdiBatchService is stopping"); - } - - private int UntilNextExecution() => Math.Max(0, (int)_nextScheduleRun.Subtract(DateTime.Now).TotalMilliseconds); -} diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/MicroApiServices/CoreApiWrapperService.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/MicroApiServices/CoreApiWrapperService.cs index a40accb..16dec31 100644 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/MicroApiServices/CoreApiWrapperService.cs +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/MicroApiServices/CoreApiWrapperService.cs @@ -127,20 +127,6 @@ namespace LCU.API.Internal.MemberPreferencesApi.MicroApiServices } } - public async Task> GetAuditOrganizationFromDateLastMaintained(DateTime dateTime) - { - try - { - return await _coreApiWrapperDao.GetAuditOrganizationFromDateLastMaintained(dateTime); - } - catch (Exception ex) - { - var error = $"Failed to GetAuditOrganizationFromDateLastMaintained. DateTime: {dateTime} Exception Message: {ex.Message}"; - Log.Error(error); - throw new ServiceException(error); - } - } - public async Task UpdateAgreementAccountsDeliveryMethod(IEnumerable accountIds, string deliveryMethod, string userId) { try diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/MicroApiServices/FileOperationsApiService.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/MicroApiServices/FileOperationsApiService.cs new file mode 100644 index 0000000..d03a08b --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/MicroApiServices/FileOperationsApiService.cs @@ -0,0 +1,32 @@ +using LCU.API.Internal.MemberPreferencesApi.DataAccess; +using LCU.Library.Internal.FileOperationsModels.Models; + +namespace LCU.API.Internal.MemberPreferencesApi.MicroApiServices +{ + public class FileOperationsApiService : IFileOperationsApiService + { + private readonly IFileOperationsApiDao _fileOperationsApiDao; + + public FileOperationsApiService(IFileOperationsApiDao fileOperationsApiDao) + { + _fileOperationsApiDao = fileOperationsApiDao; + } + + public async Task AppendFile(AppendFileRequest request) + { + try + { + var result = await _fileOperationsApiDao.AppendFileAsync(request); + + Log.Information($"XDI File Sent, Response: {result.ReturnResponse}"); + return result; + } + catch (Exception ex) + { + var error = $"Failed to create XDI Direct File. Exception Message: {ex.Message}"; + Log.Error(error); + throw new ServiceException(error); + } + } + } +} diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/MicroApiServices/FtpApiService.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/MicroApiServices/FtpApiService.cs deleted file mode 100644 index 38b09ae..0000000 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/MicroApiServices/FtpApiService.cs +++ /dev/null @@ -1,30 +0,0 @@ -using LCU.Api.Internal.FTPLib.Models; -using LCU.API.Internal.MemberPreferencesApi.DataAccess; - -namespace LCU.API.Internal.MemberPreferencesApi.MicroApiServices -{ - public class FtpApiService : IFtpApiService - { - private readonly IFtpApiDao _ftpApiDao; - - public FtpApiService(IFtpApiDao ftpApiDao) - { - _ftpApiDao = ftpApiDao; - } - - public async Task SendXdiFtpRequest(SshFtpRequest request) - { - try - { - await _ftpApiDao.SendFtpAsync(request); - Log.Information($"XDI Ftp Sent: {request.RemoteFilePath}"); - } - catch (Exception ex) - { - var error = $"Failed to send FTP file. Exception Message: {ex.Message}"; - Log.Error(error); - throw new ServiceException(error); - } - } - } -} diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/MicroApiServices/ICoreApiWrapperService.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/MicroApiServices/ICoreApiWrapperService.cs index 44083d6..4e3fb12 100644 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/MicroApiServices/ICoreApiWrapperService.cs +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/MicroApiServices/ICoreApiWrapperService.cs @@ -12,6 +12,5 @@ public interface ICoreApiWrapperService public Task> GetAgreementAccountsByOrganizationId(long organizationId); public Task> GetAuditAccountsFromDateLastMaintained(DateTime dateTime); public Task> GetAuditAgreementFromDateLastMaintained(DateTime dateTime); - public Task> GetAuditOrganizationFromDateLastMaintained(DateTime dateTime); public Task UpdateAgreementAccountsDeliveryMethod(IEnumerable accountIds, string deliveryMethod, string userId); } diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/MicroApiServices/IFileOperationsApiService.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/MicroApiServices/IFileOperationsApiService.cs new file mode 100644 index 0000000..749ae5c --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/MicroApiServices/IFileOperationsApiService.cs @@ -0,0 +1,8 @@ +using LCU.Library.Internal.FileOperationsModels.Models; + +namespace LCU.API.Internal.MemberPreferencesApi.MicroApiServices; + +public interface IFileOperationsApiService +{ + public Task AppendFile(AppendFileRequest request); +} diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/MicroApiServices/IFtpApiService.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/MicroApiServices/IFtpApiService.cs deleted file mode 100644 index 02c861e..0000000 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/MicroApiServices/IFtpApiService.cs +++ /dev/null @@ -1,8 +0,0 @@ -using LCU.Api.Internal.FTPLib.Models; - -namespace LCU.API.Internal.MemberPreferencesApi.MicroApiServices; - -public interface IFtpApiService -{ - public Task SendXdiFtpRequest(SshFtpRequest request); -} diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/MicroApiServices/IScanBiCoreApiWrapperService.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/MicroApiServices/IScanBiCoreApiWrapperService.cs new file mode 100644 index 0000000..5db2da9 --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/MicroApiServices/IScanBiCoreApiWrapperService.cs @@ -0,0 +1,7 @@ +namespace LCU.API.Internal.MemberPreferencesApi.MicroApiServices +{ + public interface IScanBiCoreApiWrapperService + { + public Task> GetAuditOrganizationFromDateLastMaintained(DateTime dateTime); + } +} diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/MicroApiServices/NotificationService.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/MicroApiServices/NotificationService.cs index 57e747a..85a3307 100644 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/MicroApiServices/NotificationService.cs +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/MicroApiServices/NotificationService.cs @@ -66,7 +66,7 @@ public class NotificationService : INotificationService var filteredRecipients = recipients.Distinct(StringComparer.InvariantCultureIgnoreCase).ToList(); var subject = "Paper Statement Enrollment"; var message = - $"

You have enrolled to receive paper for your statements and notices.

You have selected to receive paper statements and notices. You will no longer be able to view these documents online or on your mobile device.

With electronic statements through Landmark Credit Union Digital Banking, you’ll be able to:

  • View your statements and tax documents online or on your mobile device
  • Maintain your own secure online archive
  • Help the environment by reducing paper and clutter

Please note, some accounts may have promotional rates or offers that require paperless statements and electing to receive paper may impact offers on your account. Please refer to your account Truth in Savings disclosure for more information. If you need to make changes to any of your preferences, you can visit Manage Delivery Preferences under Statements & Notices.

You are receiving this email because you requested to receive paper statements and notices. If you did not make this selection or believe this is in error, please contact us.

Landmark Credit Union | Contact Us

Landmark Credit Union

© 2021 All rights reserved

"; + $"

You have enrolled to receive paper for your statements and notices.

You have selected to receive paper statements and notices. You will no longer be able to view these documents online or on your mobile device.

With electronic documents through Landmark Credit Union Digital Banking, you’ll be able to:

  • View your statements and tax documents online or on your mobile device
  • Maintain your own secure online archive
  • Help the environment by reducing paper and clutter

Please note that this change in delivery method could impact fees, offers, and earnings tied to some account requirements. Please refer to your recent offers, account Truth in Savings disclosure, and current fee schedule for more information. If you need to make changes to any of your preferences, you can visit Manage Delivery Preferences under Statements & Notices.

You are receiving this email because you requested to receive paper statements and notices. If you did not make this selection or believe this is in error, please contact us.

Landmark Credit Union | Contact Us

Landmark Credit Union

© 2021 All rights reserved

"; await SendMessageAsync(filteredRecipients, subject, message); } diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/MicroApiServices/ScanBiCoreApiWrapperService.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/MicroApiServices/ScanBiCoreApiWrapperService.cs new file mode 100644 index 0000000..921a4e9 --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/MicroApiServices/ScanBiCoreApiWrapperService.cs @@ -0,0 +1,28 @@ +using LCU.API.Internal.MemberPreferencesApi.DataAccess; + +namespace LCU.API.Internal.MemberPreferencesApi.MicroApiServices; + +public class ScanBiCoreApiWrapperService : IScanBiCoreApiWrapperService +{ + private readonly IScanBiCoreApiWrapperDao _scanBiCoreApiWrapperDao; + + public ScanBiCoreApiWrapperService(IScanBiCoreApiWrapperDao scanBiCoreApiWrapperDao) + { + _scanBiCoreApiWrapperDao = scanBiCoreApiWrapperDao; + } + + public async Task> GetAuditOrganizationFromDateLastMaintained(DateTime dateTime) + { + try + { + return await _scanBiCoreApiWrapperDao.GetAuditOrganizationFromDateLastMaintained(dateTime); + } + catch (Exception ex) + { + var error = $"Failed to GetAuditOrganizationFromDateLastMaintained. DateTime: {dateTime} Exception Message: {ex.Message}"; + Log.Error(error); + throw new ServiceException(error); + } + } +} + diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/QueueServices/IQueueDnaAccountAuditService.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/QueueServices/IQueueDnaAccountAuditService.cs deleted file mode 100644 index 6d032d5..0000000 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/QueueServices/IQueueDnaAccountAuditService.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace LCU.API.Internal.MemberPreferencesApi.Services.QueueServices; - -public interface IQueueDnaAccountAuditService -{ - Task QueueDataAuditForAccounts(List accountNumbers, int consecutiveFailures = 0); -} diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/QueueServices/IQueueDnaAgreementAuditService.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/QueueServices/IQueueDnaAgreementAuditService.cs deleted file mode 100644 index 9bfb971..0000000 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/QueueServices/IQueueDnaAgreementAuditService.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace LCU.API.Internal.MemberPreferencesApi.Services.QueueServices; - -public interface IQueueDnaAgreementAuditService -{ - Task QueueDataAuditForAgreements(List agreementAuditRecords, int consecutiveFailures = 0); -} diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/QueueServices/IQueueDnaAuditProcessService.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/QueueServices/IQueueDnaAuditProcessService.cs new file mode 100644 index 0000000..b22f0c8 --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/QueueServices/IQueueDnaAuditProcessService.cs @@ -0,0 +1,6 @@ +namespace LCU.API.Internal.MemberPreferencesApi.Services.QueueServices; + +public interface IQueueDnaAuditProcessService +{ + Task QueueDnaAuditProcessRequest(DnaAuditProcessRequest request); +} diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/QueueServices/IQueueDnaOrganizationAuditService.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/QueueServices/IQueueDnaOrganizationAuditService.cs deleted file mode 100644 index 72ff83c..0000000 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/QueueServices/IQueueDnaOrganizationAuditService.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace LCU.API.Internal.MemberPreferencesApi.Services.QueueServices; - -public interface IQueueDnaOrganizationAuditService -{ - Task QueueDataAuditForOrganizations(List organizationNumbers, int consecutiveFailures = 0); -} diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/QueueServices/IQueueXdiBatchProcessService.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/QueueServices/IQueueXdiBatchProcessService.cs new file mode 100644 index 0000000..4d72171 --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/QueueServices/IQueueXdiBatchProcessService.cs @@ -0,0 +1,6 @@ +namespace LCU.API.Internal.MemberPreferencesApi.Services.QueueServices; + +public interface IQueueXdiBatchProcessService +{ + Task QueueXdiBatchProcess(XdiBatchProcessRequest request); +} diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/QueueServices/IQueueXdiBatchService.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/QueueServices/IQueueXdiBatchService.cs deleted file mode 100644 index ce08f57..0000000 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/QueueServices/IQueueXdiBatchService.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace LCU.API.Internal.MemberPreferencesApi.Services.QueueServices; - -public interface IQueueXdiBatchService -{ - Task QueueXdiBatchProcess(XdiBatchRequest request); -} diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/QueueServices/QueueDnaAccountAuditService.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/QueueServices/QueueDnaAccountAuditService.cs deleted file mode 100644 index db2e253..0000000 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/QueueServices/QueueDnaAccountAuditService.cs +++ /dev/null @@ -1,44 +0,0 @@ -using LCU.Library.Internal.LcuMassTransitModels; -using LCU.Library.Internal.MemberPreferencesApiModels.Enums; -using MassTransit; - -namespace LCU.API.Internal.MemberPreferencesApi.Services.QueueServices -{ - public class QueueDnaAccountAuditService : IQueueDnaAccountAuditService - { - private readonly ISendEndpoint _sendEndpoint; - private readonly ReceiveEndpointConfiguration _dnaAccountAuditReceiveEndpoint; - - public QueueDnaAccountAuditService(IBusControl busControl, ReceiveEndpointConfigurations receiveEndpointConfigurations) - { - _dnaAccountAuditReceiveEndpoint = receiveEndpointConfigurations.DnaAccountAuditEndpoint; - _sendEndpoint = busControl.GetSendEndpoint(_dnaAccountAuditReceiveEndpoint.ReceiveEndpointUri).Result; - } - - public async Task QueueDataAuditForAccounts(List accountAuditRecords, int consecutiveFailures = 0) - { - try - { - foreach (var account in accountAuditRecords) - { - var cancellationTokenSource = new CancellationTokenSource(TimeSpan.FromSeconds(30)); - var request = new DnaFieldChangeRequest() - { - DnaFieldIdInformation = account, - ConsecutiveFailures = consecutiveFailures, - DnaProcessType = DnaAuditProcessType.DNAAccounts, - LastUpdated = DateTime.UtcNow, - ProcessId = 2 - }; - await _sendEndpoint.Send(request, cancellationTokenSource.Token); - }; - } - catch (Exception ex) - { - Log.ForContext(Enum.GetName(typeof(PropertyEnum), PropertyEnum.Group), Enum.GetName(typeof(GroupEnum), GroupEnum.ITDevelopment)) - .Error(ex, "Failed to Queue MemberPreference DNA Account Audit records."); - throw; - } - } - } -} diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/QueueServices/QueueDnaAgreementAuditService.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/QueueServices/QueueDnaAgreementAuditService.cs deleted file mode 100644 index 5395971..0000000 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/QueueServices/QueueDnaAgreementAuditService.cs +++ /dev/null @@ -1,43 +0,0 @@ -using LCU.Library.Internal.LcuMassTransitModels; -using LCU.Library.Internal.MemberPreferencesApiModels.Enums; -using MassTransit; - -namespace LCU.API.Internal.MemberPreferencesApi.Services.QueueServices; - -public class QueueDnaAgreementAuditService : IQueueDnaAgreementAuditService -{ - private readonly ISendEndpoint _sendEndpoint; - private readonly ReceiveEndpointConfiguration _dnaAuditAgreementReceiveEndpoint; - - public QueueDnaAgreementAuditService(IBusControl busControl, ReceiveEndpointConfigurations receiveEndpointConfigurations) - { - _dnaAuditAgreementReceiveEndpoint = receiveEndpointConfigurations.DnaAgreementAuditEndpoint; - _sendEndpoint = busControl.GetSendEndpoint(_dnaAuditAgreementReceiveEndpoint.ReceiveEndpointUri).Result; - } - - public async Task QueueDataAuditForAgreements(List agreementAuditRecords, int consecutiveFailures = 0) - { - try - { - foreach (var agreement in agreementAuditRecords) - { - var cancellationTokenSource = new CancellationTokenSource(TimeSpan.FromSeconds(30)); - var request = new DnaFieldChangeRequest() - { - DnaFieldIdInformation = agreement, - ConsecutiveFailures = consecutiveFailures, - DnaProcessType = DnaAuditProcessType.DNAAgreement, - LastUpdated = DateTime.UtcNow, - ProcessId = 1 - }; - await _sendEndpoint.Send(request, cancellationTokenSource.Token); - } - } - catch (Exception ex) - { - Log.ForContext(Enum.GetName(typeof(PropertyEnum), PropertyEnum.Group), Enum.GetName(typeof(GroupEnum), GroupEnum.ITDevelopment)) - .Error(ex, "Failed to Queue MemberPreference DNA Account Audit records."); - throw; - } - } -} diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/QueueServices/QueueDnaAuditProcessService.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/QueueServices/QueueDnaAuditProcessService.cs new file mode 100644 index 0000000..b17ae8b --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/QueueServices/QueueDnaAuditProcessService.cs @@ -0,0 +1,31 @@ + +using LCU.Library.Internal.LcuMassTransitModels; +using MassTransit; + +namespace LCU.API.Internal.MemberPreferencesApi.Services.QueueServices; + +public class QueueDnaAuditProcessService : IQueueDnaAuditProcessService +{ + private readonly ISendEndpoint _sendEndpoint; + + public QueueDnaAuditProcessService(IBusControl busControl, ReceiveEndpointConfigurations receiveEndpointConfigurations) + { + _sendEndpoint = busControl.GetSendEndpoint(receiveEndpointConfigurations.DnaAuditProcessEndpoint.ReceiveEndpointUri).Result; + } + + public async Task QueueDnaAuditProcessRequest(DnaAuditProcessRequest request) + { + try + { + var cancellationTokenSource = new CancellationTokenSource(TimeSpan.FromSeconds(30)); + await _sendEndpoint.Send(request, cancellationTokenSource.Token); + } + catch (Exception ex) + { + Log.ForContext(Enum.GetName(typeof(PropertyEnum), PropertyEnum.Group), + Enum.GetName(typeof(GroupEnum), GroupEnum.ITDevelopment)) + .Error(ex, "Failed to Queue DnaAuditProcess Request."); + throw new ServiceException("Failed to Queue DnaAuditProcess Request."); + } + } +} diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/QueueServices/QueueDnaOrganizationService.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/QueueServices/QueueDnaOrganizationService.cs deleted file mode 100644 index 656ddc5..0000000 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/QueueServices/QueueDnaOrganizationService.cs +++ /dev/null @@ -1,44 +0,0 @@ -using LCU.Library.Internal.LcuMassTransitModels; -using LCU.Library.Internal.MemberPreferencesApiModels.Enums; -using MassTransit; - -namespace LCU.API.Internal.MemberPreferencesApi.Services.QueueServices; - -public class QueueDnaOrganizationService : IQueueDnaOrganizationAuditService -{ - private readonly ISendEndpoint _sendEndpoint; - private readonly ReceiveEndpointConfiguration _dnaAuditOrganizationReceiveEndpoint; - - public QueueDnaOrganizationService(IBusControl busControl, ReceiveEndpointConfigurations receiveEndpointConfigurations) - { - _dnaAuditOrganizationReceiveEndpoint = receiveEndpointConfigurations.DnaOrganizationAuditEndpoint; - _sendEndpoint = busControl.GetSendEndpoint(_dnaAuditOrganizationReceiveEndpoint.ReceiveEndpointUri).Result; - } - - public async Task QueueDataAuditForOrganizations(List organizationAuditRecords, int consecutiveFailures = 0) - { - try - { - foreach (var organization in organizationAuditRecords) - { - var cancellationTokenSource = new CancellationTokenSource(TimeSpan.FromSeconds(30)); - var request = new DnaFieldChangeRequest() - { - DnaFieldIdInformation = organization, - ConsecutiveFailures = consecutiveFailures, - DnaProcessType = DnaAuditProcessType.DNAOrganization, - LastUpdated = DateTime.UtcNow, - ProcessId = 3 - - }; - await _sendEndpoint.Send(request, cancellationTokenSource.Token); - } - } - catch (Exception ex) - { - Log.ForContext(Enum.GetName(typeof(PropertyEnum), PropertyEnum.Group), Enum.GetName(typeof(GroupEnum), GroupEnum.ITDevelopment)) - .Error(ex, "Failed to Queue MemberPreference DNA Account Audit records."); - throw; - } - } -} diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/QueueServices/QueueXdiBatchService.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/QueueServices/QueueXdiBatchProcessService.cs similarity index 78% rename from LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/QueueServices/QueueXdiBatchService.cs rename to LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/QueueServices/QueueXdiBatchProcessService.cs index 0f7e7a8..98ce0ca 100644 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/QueueServices/QueueXdiBatchService.cs +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/QueueServices/QueueXdiBatchProcessService.cs @@ -3,18 +3,17 @@ using MassTransit; namespace LCU.API.Internal.MemberPreferencesApi.Services.QueueServices { - public class QueueXdiBatchService : IQueueXdiBatchService + public class QueueXdiBatchProcessService : IQueueXdiBatchProcessService { private readonly ISendEndpoint _sendEndpoint; private readonly ReceiveEndpointConfiguration _xdiServiceEndpoint; - public QueueXdiBatchService(IBusControl busControl, ReceiveEndpointConfigurations receiveEndpointConfigurations) + public QueueXdiBatchProcessService(IBusControl busControl, ReceiveEndpointConfigurations receiveEndpointConfigurations) { _xdiServiceEndpoint = receiveEndpointConfigurations.XdiBatchProcessEndpoint; _sendEndpoint = busControl.GetSendEndpoint(_xdiServiceEndpoint.ReceiveEndpointUri).Result; } - - public async Task QueueXdiBatchProcess(XdiBatchRequest request) + public async Task QueueXdiBatchProcess(XdiBatchProcessRequest request) { try { diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/XdiServices/IXdiBatchProcessService.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/XdiServices/IXdiBatchProcessService.cs index 81876ef..9a25945 100644 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/XdiServices/IXdiBatchProcessService.cs +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/XdiServices/IXdiBatchProcessService.cs @@ -2,5 +2,5 @@ namespace LCU.API.Internal.MemberPreferencesApi.Services.XdiServices; public interface IXdiBatchProcessService { - Task RunXdiBatchProcess(string sftpRootBasePath); + Task HandleXdiBatchProcess(XdiBatchProcessRequest xdiBatchProcessRequest); } diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/XdiServices/IXdiBatchService.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/XdiServices/IXdiBatchService.cs index 47ce919..7aa46c2 100644 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/XdiServices/IXdiBatchService.cs +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/XdiServices/IXdiBatchService.cs @@ -1,17 +1,15 @@ using LCU.API.Internal.MemberPreferencesApi.Models; using LCU.Library.Internal.MemberPreferencesApiModels.Entities; -using ApiResponse = LCU.Library.Internal.ApiResponse.Models; namespace LCU.API.Internal.MemberPreferencesApi.Services.XdiServices; -public interface IXdiBatchService +public interface IXdiBatchService { Task AddXdiBatchItem(XdiBatchItem newItem); + Task SaveRangeAsync(List xdiBatchItemList); Task CreateXdiBatchFiles(XdiBatchRequest request); Task BuildXdiBatchRequest(XdiBatchRequest request); - Task HandleFtpProcess(XdiBatchRequest request); - Task RequestFtpTransport(IReadOnlyCollection files); - Task MarkPendingSuccessful(ApiResponse.Response response); - Task> CreateFtpPayload(XdiBatchFile xdiBatchFile); + Task> BuildXdiFiles(XdiBatchFile batchFile, string filePath, XdiBatchProcessInfo xdiBatchProcessInfo); + Task MarkPendingSuccessful(List batchFileExportList); Task DoesMemberHavePendingXdiChange(string memberId); } diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/XdiServices/XdiBatchProcessService.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/XdiServices/XdiBatchProcessService.cs index 1a849e0..78bc0f7 100644 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/XdiServices/XdiBatchProcessService.cs +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/XdiServices/XdiBatchProcessService.cs @@ -1,22 +1,22 @@ using LCU.API.Internal.MemberPreferencesApi.Models; -using LCU.API.Internal.MemberPreferencesApi.Services.QueueServices; using LCU.API.Internal.MemberPreferencesApiLib.Repositories; +using LCU.Library.Internal.ApiResponse.Services; using LCU.Library.Internal.MemberPreferencesApiModels.Enums; namespace LCU.API.Internal.MemberPreferencesApi.Services.XdiServices; -public class XdiBatchProcessService : IXdiBatchProcessService +public class XdiBatchProcessService : IXdiBatchProcessService { private readonly IXdiBatchItemsRepository _xdiBatchItemsRepository; - private readonly IQueueXdiBatchService _queueXdiBatchService; + private readonly IXdiBatchService _xdiBatchService; - public XdiBatchProcessService(IQueueXdiBatchService queueXdiBatchService, IXdiBatchItemsRepository xdiBatchItemsRepository) + public XdiBatchProcessService(IXdiBatchService xdiBatchService, IXdiBatchItemsRepository xdiBatchItemsRepository) { _xdiBatchItemsRepository = xdiBatchItemsRepository; - _queueXdiBatchService = queueXdiBatchService; + _xdiBatchService = xdiBatchService; } - public async Task RunXdiBatchProcess(string sftpRootBasePath) + public async Task HandleXdiBatchProcess(XdiBatchProcessRequest xdiBatchProcessRequest) { try { @@ -33,17 +33,19 @@ public class XdiBatchProcessService : IXdiBatchProcessService { XdiBatch = xdiBatch, XdiBatchItems = xdiBatchItems.ToList(), - SftpRootBasePath = sftpRootBasePath + XdiAppendFileRootBasePath = xdiBatchProcessRequest.XdiAppendFileRootBasePath }; - await _queueXdiBatchService.QueueXdiBatchProcess(request); + await _xdiBatchService.CreateXdiBatchFiles(request); + await QueueReturnResponse.QueueResponse(xdiBatchProcessRequest, true, new List { $"Requested {xdiBatchItems.Count()} Xdi Batch Items to Process."}); } } catch (Exception ex) { - var error = $"Failed to Run XdiBatchProcess. Exception Message: {ex.Message}"; - Log.Error(error); - throw new ServiceException(error); + var errorMessage = $"Failed to HandleXdiBatchProcess. Exception Message: {ex.Message}"; + Log.Error(errorMessage); + await QueueReturnResponse.QueueResponse(xdiBatchProcessRequest, false, new List() {errorMessage}); + throw new ServiceException(errorMessage); } } } diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/XdiServices/XdiBatchService.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/XdiServices/XdiBatchService.cs index 525fa8c..bfdcd2d 100644 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/XdiServices/XdiBatchService.cs +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/Services/XdiServices/XdiBatchService.cs @@ -1,64 +1,64 @@ -using ApiResponse = LCU.Library.Internal.ApiResponse.Models; using LCU.API.Internal.MemberPreferencesApi.MicroApiServices; +using LCU.API.Internal.MemberPreferencesApi.Models; using LCU.API.Internal.MemberPreferencesApiLib.Repositories; -using LCU.Api.Internal.FTPLib.Models; -using LCU.Library.Internal.ApiResponse.Models; -using LCU.Library.Internal.LcuMassTransitModels; +using LCU.Library.Internal.FileOperationsModels.Models; +using LCU.Library.Internal.LcuClassPatterns.Crud.Services; using LCU.Library.Internal.MemberPreferencesApiModels.Entities; using LCU.Library.Internal.MemberPreferencesApiModels.Enums; -using LCU.API.Internal.MemberPreferencesApi.Models; -using Newtonsoft.Json; +using System.Data.SqlClient; namespace LCU.API.Internal.MemberPreferencesApi.Services.XdiServices { - public class XdiBatchService : IXdiBatchService + public class XdiBatchService : CrudService, IXdiBatchService { + private readonly IXdiBatchProcessInfoRepository _xdiBatchProcessInfoRepository; private readonly IXdiBatchItemsRepository _xdiBatchItemsRepository; private readonly IUnifiedOptInRepository _unifiedOptInRepository; private readonly IMemberPreferenceRepository _memberPreferenceRepository; - private readonly ConnectionConfiguration _connectionConfiguration; - private readonly ReceiveEndpointConfiguration _completionReceiveEndpoint; private readonly IUnitOfWork _unitOfWork; - private readonly XdiSftpApiConfiguration _xdiSftpApiConfiguration; - private readonly IFtpApiService _ftpApiService; + private readonly IFileOperationsApiService _fileOperationsApiService; private const string XdiBatchProcessOperatorName = "XdiBatchProcess"; - public XdiBatchService(IXdiBatchItemsRepository xdiBatchItemsRepository, IUnitOfWork unitOfWork, - XdiSftpApiConfiguration xdiSftpApiConfiguration, IUnifiedOptInRepository unifiedOptInRepository, - IMemberPreferenceRepository memberPreferenceRepository, ConnectionConfiguration connectionConfiguration, - ReceiveEndpointConfigurations receiveEndpointsConfigurations, IFtpApiService ftpApiService) + public XdiBatchService(IXdiBatchItemsRepository xdiBatchItemsRepository, + IUnitOfWork unitOfWork, IUnifiedOptInRepository unifiedOptInRepository, + IMemberPreferenceRepository memberPreferencesRepository, IFileOperationsApiService fileOperationsApiService, + IXdiBatchProcessInfoRepository xdiBatchProcessInfoRepository) : base(xdiBatchProcessInfoRepository) { _xdiBatchItemsRepository = xdiBatchItemsRepository; _unitOfWork = unitOfWork; - _xdiSftpApiConfiguration = xdiSftpApiConfiguration; + _memberPreferenceRepository = memberPreferencesRepository; _unifiedOptInRepository = unifiedOptInRepository; - _memberPreferenceRepository = memberPreferenceRepository; - _connectionConfiguration = connectionConfiguration; - _ftpApiService = ftpApiService; - _completionReceiveEndpoint = receiveEndpointsConfigurations.XdiBatchConfirmEndpoint; + _fileOperationsApiService = fileOperationsApiService; + _xdiBatchProcessInfoRepository = xdiBatchProcessInfoRepository; } public async Task CreateXdiBatchFiles(XdiBatchRequest request) { + var batchProcessInfo = new XdiBatchProcessInfo(); + var batchUserIds = string.Join(",", request.XdiBatchItems.Select(c => c.UserId).ToList()); try { - if (!request.XdiBatchItems.Any()) + var batchProcessInProgress = _xdiBatchProcessInfoRepository.FindBatchProcessInfoByStatus(XdiBatchProcessStatus.InProgress).Result; + if (batchProcessInProgress.Count() == 0) { - return; - } + request = await BuildXdiBatchRequest(request); + batchProcessInfo = await CreateNewBatchProcessInfo(request.XdiBatchItems.Count()); + await CreateXdiExportFileRequest(request, batchProcessInfo); - request = await BuildXdiBatchRequest(request); - await HandleFtpProcess(request); + await UpdateBatchAsync(batchProcessInfo, XdiBatchProcessStatus.Completed, $"Completed XDI Batch Process for UserIds: {batchUserIds}"); + } } catch (Exception ex) { Log.Error(ex, $"Failed to Create XDI Batch Files."); + await UpdateBatchAsync(batchProcessInfo, XdiBatchProcessStatus.Failed, $"Failed XDI Batch Process for UserIds: {batchUserIds}"); + throw new ServiceException($"Failed to Create XDI Batch Files. Exception Message: {ex.Message}"); } } public async Task BuildXdiBatchRequest(XdiBatchRequest request) { - foreach (var item in request.XdiBatchItems) + foreach (var item in request.XdiBatchItems) { var currentSettings = await _unifiedOptInRepository.GetMemberOptInSettings(item.UserId); if (currentSettings != null) @@ -74,11 +74,11 @@ namespace LCU.API.Internal.MemberPreferencesApi.Services.XdiServices BatchState = BatchState.TransferPending, LastUpdated = DateTime.UtcNow }); - Log.Information($"Hosted XDI Sync processed batch item with UserId: {item.UserId}"); + Log.Information($"XdiBatchService processed batch item with UserId: {item.UserId}"); } else { - Log.Error($"Row not processed in XDI Audit for member with UserId: {item.UserId}, marking complete."); + Log.Error($"No XdiBatchRow or XDI File was processed based on current member UserId: {item.UserId} Opt In Settings, marking complete."); _xdiBatchItemsRepository.Delete(item); } }; @@ -89,71 +89,49 @@ namespace LCU.API.Internal.MemberPreferencesApi.Services.XdiServices return request; } - public async Task HandleFtpProcess(XdiBatchRequest request) + public async Task CreateXdiExportFileRequest(XdiBatchRequest request, XdiBatchProcessInfo xdiBatchProcessInfo) { try { - IReadOnlyCollection batchFiles = request.XdiBatch.GetNonEmptyFiles(request.SftpRootBasePath); - Log.Information($"Hosted XDI Sync produced {batchFiles.Count} files"); + IReadOnlyCollection batchFiles = request.XdiBatch.GetNonEmptyFiles(); + Log.Information($"XdiBatchService produced {batchFiles.Count} files"); - bool results = await RequestFtpTransport(batchFiles); - string resultDescription = results ? "Success" : "Failure"; - Log.Information($"Hosted XDI Sync Ftp Results...{resultDescription}"); + foreach (var xdiBatchFile in batchFiles) + { + var xdiBatchFileExport = await BuildXdiFiles(xdiBatchFile, request.XdiAppendFileRootBasePath, xdiBatchProcessInfo); + await MarkPendingSuccessful(xdiBatchFileExport); + } } catch (Exception ex) { - Log.Error(ex, $"Failed to Handle FTP Process."); + Log.Error(ex, $"Failed to Create the XDI File to export."); } } - public async Task RequestFtpTransport(IReadOnlyCollection files) + public async Task> BuildXdiFiles(XdiBatchFile batchFile, string filePath, XdiBatchProcessInfo xdiBatchProcessInfo) { - SshFtpRequest request = BuildFtpRequest(); - - foreach (var xdiBatchFile in files) - { - request.LocalFileData = xdiBatchFile.ConvertToDataFile(); - request.RemoteFilePath = xdiBatchFile.GetFileName(); - - var payload = await CreateFtpPayload(xdiBatchFile); - request.ResponseItems.First().ResponsePayload = JsonConvert.SerializeObject(payload).ToString(); - await _ftpApiService.SendXdiFtpRequest(request); - } - return true; + AppendFileRequest request = BuildFileOperationsRequest(batchFile, filePath); + var xdiBatchFileExport = await CreateDirectoryXdiFiles(batchFile); + var result = await _fileOperationsApiService.AppendFile(request); + + return xdiBatchFileExport; } - private SshFtpRequest BuildFtpRequest() + private AppendFileRequest BuildFileOperationsRequest(XdiBatchFile xdiBatchFile, string filePath) { - var request = new SshFtpRequest() + var request = new AppendFileRequest() { - ResponseItems = new List() - { - new ResponseItem() - { - ResponsePayload = "", - ReturnQueueConnectionConfig = new QueueConnectionConfig() - { - Url = _connectionConfiguration.HostUrl, - Username = _connectionConfiguration.UserName, - Password = _connectionConfiguration.Password - }, - ReturnQueueConsumerConfig = new QueueConsumerConfig() - { - ExchangeName = _completionReceiveEndpoint.ReceiveEndpoint - } - } - }, - HostName = _xdiSftpApiConfiguration.HostName, - Password = _xdiSftpApiConfiguration.Password, - PortNumber = _xdiSftpApiConfiguration.PortNumber, - UserName = _xdiSftpApiConfiguration.UserName + DestinationPath = filePath, + Extension = ".txt", + FileData = xdiBatchFile.ConvertToDataFile(), + FileName = xdiBatchFile.GetFileName() }; return request; } - public async Task> CreateFtpPayload(XdiBatchFile xdiBatchFile) + public async Task> CreateDirectoryXdiFiles(XdiBatchFile xdiBatchFile) { - List payload = new List(); + List batchFileExportList = new List(); var userIds = xdiBatchFile.Data.Select(x => x.UserId).ToList(); foreach (var userId in userIds) @@ -161,7 +139,7 @@ namespace LCU.API.Internal.MemberPreferencesApi.Services.XdiServices var settings = await _unifiedOptInRepository.GetMemberOptInSettingsNoTracking(userId); if (settings != null) { - payload.Add(new FtpQueuePayloadItem + batchFileExportList.Add(new XdiBatchFileExport { UserId = userId, Value = settings.UniversalOptIn == DeliveryPreference.Electronic @@ -170,22 +148,43 @@ namespace LCU.API.Internal.MemberPreferencesApi.Services.XdiServices }); } } - return payload; + return batchFileExportList; } public async Task AddXdiBatchItem(XdiBatchItem newItem) { - var existing = await _xdiBatchItemsRepository.FindExistingItem(newItem.UserId, BatchState.New); - if (existing != null) + try { - existing.LastUpdated = newItem.Created; - _xdiBatchItemsRepository.Update(existing); + var existing = await _xdiBatchItemsRepository.FindExistingItem(newItem.UserId, BatchState.New); + if (existing != null) + { + existing.LastUpdated = newItem.Created; + _xdiBatchItemsRepository.Update(existing); + } + else + { + await _xdiBatchItemsRepository.SaveAsync(newItem); + } + + await _unitOfWork.CompleteAsync(); } - else + catch (Exception ex) { - await _xdiBatchItemsRepository.SaveAsync(newItem); + Log.Error($"AddXdiBatchItem userId {newItem.UserId} error: " + ex.Message); + } + } + + public async Task SaveRangeAsync(List xdiBatchItemList) + { + try + { + await _xdiBatchItemsRepository.SaveRangeAsync(xdiBatchItemList); + await _unitOfWork.CompleteAsync(); + } + catch (Exception ex) + { + Log.Error($"SaveRangeAsync method error: " + ex.Message); } - await _unitOfWork.CompleteAsync(); } public async Task DoesMemberHavePendingXdiChange(string userId) @@ -193,33 +192,21 @@ namespace LCU.API.Internal.MemberPreferencesApi.Services.XdiServices return await _xdiBatchItemsRepository.FindExistingItem(userId, BatchState.TransferPending) != null; } - public async Task MarkPendingSuccessful(ApiResponse.Response response) + public async Task MarkPendingSuccessful(List batchFileExportList) { try { - var payloadString = response.ResponsePayload; - var payload = JsonConvert.DeserializeObject>(payloadString); - if (!response.Successful) - { - var errorMessage = string.Join("; ", response.ResponseStack.ToArray()); - throw new ServiceException($"XdiBatchItemService Failure occured. Payload response was unsuccessful. Error Message: {errorMessage}"); - } + Log.Information($"Marking {batchFileExportList.Count} Batch Items Successful."); + var memberIds = batchFileExportList.Select(x => x.UserId); + var pendingComplete = await _xdiBatchItemsRepository.MarkPendingSuccessful(memberIds.ToList()); - Log.Information($"Marking {payload.Count} Payloads Successful."); - var memberIds = payload.Select(x => x.UserId); - var result = await _xdiBatchItemsRepository.MarkPendingSuccessful(memberIds.ToList()); - if (result) + if (pendingComplete) { - await UpdateMemberPreferenceEntries(payload); + await UpdateMemberPreferenceEntries(batchFileExportList); } await _unitOfWork.CompleteAsync(XdiBatchProcessOperatorName, DateTime.UtcNow, UserType.System); - return result; - } - catch (ServiceException serviceEx) - { - Log.Error($"{serviceEx}"); - throw serviceEx; + return pendingComplete; } catch (Exception ex) { @@ -228,9 +215,9 @@ namespace LCU.API.Internal.MemberPreferencesApi.Services.XdiServices } } - private async Task UpdateMemberPreferenceEntries(List payload) + private async Task UpdateMemberPreferenceEntries(List batchFileExport) { - foreach (var item in payload) + foreach (var item in batchFileExport) { var settings = await _unifiedOptInRepository.GetOrCreateMemberOptinSettings(item.UserId); @@ -269,5 +256,45 @@ namespace LCU.API.Internal.MemberPreferencesApi.Services.XdiServices } } } + + public async Task CreateNewBatchProcessInfo(int batchTotal) + { + var xdiBatchProcessInfo = new XdiBatchProcessInfo(); + xdiBatchProcessInfo.StartTimeStamp = DateTime.Now; + xdiBatchProcessInfo.XdiBatchProcessStatus = XdiBatchProcessStatus.InProgress; + xdiBatchProcessInfo.BatchTotal = batchTotal; + return await _xdiBatchProcessInfoRepository.AddAsync(xdiBatchProcessInfo); + } + + public async Task UpdateBatchAsync(XdiBatchProcessInfo xdiBatchProcessInfo, XdiBatchProcessStatus xdiBatchStatus, string apiResponse) + { + try + { + var existing = await _xdiBatchProcessInfoRepository.FindByIdAsync(xdiBatchProcessInfo.XdiBatchProcessInfoId); + if (existing == null) + { + throw new ServiceException($"XdiBatchProcessInfo with XdiBatchProcessInfoId {xdiBatchProcessInfo.XdiBatchProcessInfoId} not found"); + } + existing.XdiBatchProcessStatus = xdiBatchStatus; + existing.ApiResponse = apiResponse; + existing.EndTimeStamp = DateTime.Now; + + await _xdiBatchProcessInfoRepository.UpdateAsync(existing); + await _unitOfWork.CompleteAsync(); + return existing; + } + catch (SqlException sqlEx) + { + var message = $"Failure updating XdiBatchProcessInfo with XdiBatchProcessInfoId {xdiBatchProcessInfo.XdiBatchProcessInfoId}"; + Log.Error(sqlEx, message); + throw new ServiceException(message); + } + catch (Exception ex) + { + var message = $"Failure updating XdiBatchProcessInfo with XdiBatchProcessInfoId {xdiBatchProcessInfo.XdiBatchProcessInfoId}"; + Log.Error(ex, message); + throw new ServiceException(message); + } + } } } diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/appsettings.json b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/appsettings.json index d2b36dc..275ac80 100644 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/appsettings.json +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApi/appsettings.json @@ -3,15 +3,9 @@ "AppName": "Member Preferences Api", "SeqUrl": "http://localhost:5080", "SeqKey": "9MQu0vLDwQ1LCFzGixZM", - "XdiBatchProcessCronSchedule": "1 5-18 * * *", - "DnaDataAuditProcessCronSchedule": "*/5 3-19 * * *", "FeatureFlags": { - "RunHostedServices": true, "RunXdiBatchProcessConsumer": true, - "RunXdiSshResponseConsumer": true, - "RunAccountDnaFieldChangeConsumer": true, - "RunAgreementDnaFieldChangeConsumer": true, - "RunOrganizationDnaFieldChangeConsumer": true + "RunDnaAuditProcessConsumer": true }, "FeatureGates": { "EnableControllers": true, @@ -43,20 +37,12 @@ "TestEmailList": [ "ITDevelopment@landmarkcu.onmicrosoft.com" ], "ShouldSendRealEmails": false }, - "FtpApiConfiguration": { - "Url": "https://localhost:56641/", - "QueueSshFtpRequestEndpoint": "SshFtp/QueueSshFtpRequest" - }, - "XdiSftpApiConfiguration": { - "SftpRootBasePath": "/home/devops/", - "HostName": "10.147.44.23", - "UserName": "devops", - "PortNumber": 22, - "Password": "vault-value", - "Fingerprint": "ssh-ed25519 255 Yj16sxy1rlbKuNxGnYTNqnDUkPjiV8qFiEAjb6h9Xdk=" + "FileOperationsApiConfiguration": { + "Url": "https://localhost:63532/api/", + "AppendFile": "DirectFileOperations/AppendFile" }, "CoreApiWrapperConfiguration": { - "CoreApiBaseUrl": "https://localhost:44355/api/core/", + "CoreApiBaseUrl": "https://qa-core-api-wrapper-api.apps.azure.lcu-internal.com/api/core/", "CoreApiGetAgreementByUserId": "Agree/AgreementByUserId/{userId}", "CoreApiGetAgreementByAgreementId": "Agree/AgreementByAgreementId/{agreementId}", "CoreApiGetAgreementsByAccountId": "Agree/AgreementsByAccountId/{accountId}", @@ -65,31 +51,20 @@ "CoreApiGetAgreementAccountsByOrganizationId": "Agree/AgreementAccountsByOrganizationId/{organizationId}", "CoreApiGetAuditAccountsFromDateLastMaintained": "Agree/AgreementAccountsAuditFromDateLastMaintained", "CoreApiGetAuditAgreementFromDateLastMaintained": "Agree/AgreementAuditFromDateLastMaintained", - "CoreApiGetAuditOrganizationFromDateLastMaintained": "Agree/OrganizationAuditFromDateLastMaintained", "CoreApiUpdateAccountsMaintenanceRequest": "Account/AccountMaintenanceRequest" }, + "ScanBiCoreApiWrapperConfiguration": { + "ScanBiCoreApiWrapperUrl": "https://qa-scanbi-core-api-wrapper-api.apps.azure.lcu-internal.com/api/core/", + "GetAuditOrganizationFromDateLastMaintainedEndpoint": "Agree/OrganizationAuditFromDateLastMaintained" + }, "XdiBatchProcessEndpoint": { "ReceiveEndpoint": "LCU.MemberPreferencesApi.XdiBatchProcess", "ReceiveEndpointType": "exchange", "PrefetchLimit": 1 }, - "XdiBatchConfirmEndpoint": { - "ReceiveEndpoint": "LCU.MemberPreferencesApi.XdiBatchConfirm", - "ReceiveEndpointType": "exchange", - "PrefetchLimit": 1 - }, - "DnaAccountAuditEndpoint": { - "ReceiveEndpoint": "LCU.MemberPreferencesApi.DnaAccountAudit", - "ReceiveEndpointType": "exchange", - "PrefetchLimit": 1 - }, - "DnaOrganizationAuditEndpoint": { - "ReceiveEndpoint": "LCU.MemberPreferencesApi.DnaOrganizationAudit", - "ReceiveEndpointType": "exchange", - "PrefetchLimit": 1 - }, - "DnaAgreementAuditEndpoint": { - "ReceiveEndpoint": "LCU.MemberPreferencesApi.DnaAgreementAudit", + + "DnaAuditProcessEndpoint": { + "ReceiveEndpoint": "LCU.MemberPreferencesApi.DnaAuditProcess", "ReceiveEndpointType": "exchange", "PrefetchLimit": 1 }, @@ -98,15 +73,32 @@ "UserName": "guest", "Password": "guest" }, - "DnaAuditProcessConfiguration": { - "LookBackMinutes": -5, - "NumberOfAllowedConsecutiveFailures": 12 - }, "ApiSecurityConfiguration": { "ApiKeyAuthenticationFailureBehavior": "Error", "ExternalApiKeySet": {}, "InternalApiKeySet": { "MembershipPreferences": "85c3f03b-f412-4f8d-bc1e-438a7a69cbbe" } + }, + "ServicesFactoryConfiguration": { + "ServiceFactoryRegistrations": [ + { + "ServiceInterfaceName": "IDNAAuditCheckService", + "ServiceRegistrations": [ + { + "ServiceName": "DNADataAgreementAuditCheckService", + "ServiceId": "0" + }, + { + "ServiceName": "DNADataAccountAuditCheckService", + "ServiceId": "1" + }, + { + "ServiceName": "DNADataOrganizationAuditService", + "ServiceId": "2" + } + ] + } + ] } } diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApiLib/LCU.API.Internal.MemberPreferencesApiLib.csproj b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApiLib/LCU.API.Internal.MemberPreferencesApiLib.csproj index 9e98fa6..e9c4894 100644 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApiLib/LCU.API.Internal.MemberPreferencesApiLib.csproj +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApiLib/LCU.API.Internal.MemberPreferencesApiLib.csproj @@ -6,6 +6,7 @@ + all diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApiLib/Persistence/ApplicationDbContext.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApiLib/Persistence/ApplicationDbContext.cs index 43c4967..cdb6413 100644 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApiLib/Persistence/ApplicationDbContext.cs +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApiLib/Persistence/ApplicationDbContext.cs @@ -18,6 +18,7 @@ public class ApplicationDbContext : DbContext, IApplicationDbContext public DbSet MemberOptInSettings { get; set; } public DbSet DnaAuditProcesses { get; set; } public DbSet XdiBatchItems { get; set; } + public DbSet XdiBatchProcessInfos { get; set; } public override Task SaveChangesAsync(CancellationToken cancellationToken = new CancellationToken()) { @@ -103,5 +104,8 @@ public class ApplicationDbContext : DbContext, IApplicationDbContext builder.Entity().ToTable("DnaAuditProcess"); builder.Entity().HasKey(p => p.ProcessId); + + builder.Entity().ToTable("XdiBatchProcessInfo"); + builder.Entity().HasKey(p => p.XdiBatchProcessInfoId); } } diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApiLib/Persistence/IApplicationDbContext.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApiLib/Persistence/IApplicationDbContext.cs index d360e99..a9ae724 100644 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApiLib/Persistence/IApplicationDbContext.cs +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApiLib/Persistence/IApplicationDbContext.cs @@ -11,6 +11,7 @@ public interface IApplicationDbContext : IAuditableChanges DbSet MemberOptInSettings { get; set; } public DbSet XdiBatchItems { get; set; } public DbSet DnaAuditProcesses { get; set; } + public DbSet XdiBatchProcessInfos { get; set; } Task SaveChangesAsync(CancellationToken cancellationToken = new CancellationToken()); Task SaveChangesWithOperatorAsync(string operatorId, DateTime dateAdded, UserType userType, CancellationToken cancellationToken); } diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApiLib/Repositories/DnaAuditProcessRepository.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApiLib/Repositories/DnaAuditProcessRepository.cs index 9daa750..2349b43 100644 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApiLib/Repositories/DnaAuditProcessRepository.cs +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApiLib/Repositories/DnaAuditProcessRepository.cs @@ -1,5 +1,6 @@ using LCU.API.Internal.MemberPreferencesApiLib.Persistence; using LCU.Library.Internal.MemberPreferencesApiModels.Entities; +using LCU.Library.Internal.MemberPreferencesApiModels.Enums; using Microsoft.EntityFrameworkCore; namespace LCU.API.Internal.MemberPreferencesApiLib.Repositories; @@ -15,6 +16,11 @@ public class DnaAuditProcessRepository : BaseRepository, IDnaAuditProcessReposit return await _context.DnaAuditProcesses.ToListAsync(); } + public async Task GetDnaAuditProcessByDnaProcessType(DnaAuditProcessType type) + { + return await _context.DnaAuditProcesses.Where(d => d.DnaProcessType == type).FirstOrDefaultAsync(); + } + public async Task Update(DnaAuditProcess existing) { _context.DnaAuditProcesses.Update(existing); diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApiLib/Repositories/IDnaAuditProcessRepository.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApiLib/Repositories/IDnaAuditProcessRepository.cs index 1de48c7..319c751 100644 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApiLib/Repositories/IDnaAuditProcessRepository.cs +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApiLib/Repositories/IDnaAuditProcessRepository.cs @@ -1,9 +1,11 @@ using LCU.Library.Internal.MemberPreferencesApiModels.Entities; +using LCU.Library.Internal.MemberPreferencesApiModels.Enums; namespace LCU.API.Internal.MemberPreferencesApiLib.Repositories; public interface IDnaAuditProcessRepository { Task> GetAllDnaAuditProcesses(); + Task GetDnaAuditProcessByDnaProcessType(DnaAuditProcessType type); Task Update(DnaAuditProcess existing); } diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApiLib/Repositories/IXdiBatchItemsRepository.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApiLib/Repositories/IXdiBatchItemsRepository.cs index b54ebe7..261e023 100644 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApiLib/Repositories/IXdiBatchItemsRepository.cs +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApiLib/Repositories/IXdiBatchItemsRepository.cs @@ -8,6 +8,7 @@ public interface IXdiBatchItemsRepository Task> GetXdiBatchItems(); Task> GetNewXdiBatchItems(); Task SaveAsync(XdiBatchItem batchItem); + Task> SaveRangeAsync(List batchItemList); Task FindExistingItem(string memberId, BatchState batchState); void Update(XdiBatchItem existing); void Delete(XdiBatchItem item); diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApiLib/Repositories/IXdiBatchProcessInfoRepository.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApiLib/Repositories/IXdiBatchProcessInfoRepository.cs new file mode 100644 index 0000000..9947ea3 --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApiLib/Repositories/IXdiBatchProcessInfoRepository.cs @@ -0,0 +1,10 @@ +using LCU.Library.Internal.LcuClassPatterns.Crud.Repositories; +using LCU.Library.Internal.MemberPreferencesApiModels.Entities; +using LCU.Library.Internal.MemberPreferencesApiModels.Enums; + +namespace LCU.API.Internal.MemberPreferencesApiLib.Repositories; + +public interface IXdiBatchProcessInfoRepository: ICrudRepository +{ + Task> FindBatchProcessInfoByStatus(XdiBatchProcessStatus xdiProcessStatus); +} diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApiLib/Repositories/XdiBatchItemsRepository.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApiLib/Repositories/XdiBatchItemsRepository.cs index 8a279ed..edd47af 100644 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApiLib/Repositories/XdiBatchItemsRepository.cs +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApiLib/Repositories/XdiBatchItemsRepository.cs @@ -27,6 +27,12 @@ public class XdiBatchItemsRepository : BaseRepository, IXdiBatchItemsRepository return batchItem; } + public async Task> SaveRangeAsync(List batchItemList) + { + await _context.XdiBatchItems.AddRangeAsync(batchItemList); + return batchItemList; + } + public async Task FindExistingItem(string userId, BatchState batchState) { return await _context.XdiBatchItems.Where(p => p.UserId == userId && p.BatchState == batchState) diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApiLib/Repositories/XdiBatchProcessInfoRepository.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApiLib/Repositories/XdiBatchProcessInfoRepository.cs new file mode 100644 index 0000000..91663ad --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApiLib/Repositories/XdiBatchProcessInfoRepository.cs @@ -0,0 +1,21 @@ +using LCU.API.Internal.MemberPreferencesApiLib.Persistence; +using LCU.Library.Internal.LcuClassPatterns.Crud.Repositories; +using LCU.Library.Internal.MemberPreferencesApiModels.Entities; +using LCU.Library.Internal.MemberPreferencesApiModels.Enums; +using Microsoft.EntityFrameworkCore; + +namespace LCU.API.Internal.MemberPreferencesApiLib.Repositories; + +public class XdiBatchProcessInfoRepository : CrudRepository, IXdiBatchProcessInfoRepository +{ + private readonly IApplicationDbContext _context; + public XdiBatchProcessInfoRepository(ApplicationDbContext context) : base(context) + { + _context = context; + } + + public async Task> FindBatchProcessInfoByStatus(XdiBatchProcessStatus xdiProcessStatus) + { + return await _context.XdiBatchProcessInfos.Where(p => p.XdiBatchProcessStatus == xdiProcessStatus).ToListAsync(); + } +} diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApiSql/LCU.API.Internal.MemberPreferencesApiSql.refactorlog b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApiSql/LCU.API.Internal.MemberPreferencesApiSql.refactorlog new file mode 100644 index 0000000..1da498c --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApiSql/LCU.API.Internal.MemberPreferencesApiSql.refactorlog @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApiSql/LCU.API.Internal.MemberPreferencesApiSql.sqlproj b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApiSql/LCU.API.Internal.MemberPreferencesApiSql.sqlproj index 719e0b5..fe468c7 100644 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApiSql/LCU.API.Internal.MemberPreferencesApiSql.sqlproj +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApiSql/LCU.API.Internal.MemberPreferencesApiSql.sqlproj @@ -63,5 +63,9 @@ + + + +
\ No newline at end of file diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApiSql/XdiBatchItems.sql b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApiSql/XdiBatchItems.sql index eeff3f5..47548ea 100644 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApiSql/XdiBatchItems.sql +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApiSql/XdiBatchItems.sql @@ -4,4 +4,5 @@ CREATE TABLE [dbo].[XdiBatchItems] [BatchState] [int] NOT NULL, [Created] [datetime2](7) NOT NULL, [LastUpdated] [datetime2](7) NOT NULL, + CONSTRAINT [UQ_XdiBatchItems_UserId] UNIQUE (UserId) ) diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApiSql/XdiBatchProcessInfo.sql b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApiSql/XdiBatchProcessInfo.sql new file mode 100644 index 0000000..9edb776 --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApiSql/XdiBatchProcessInfo.sql @@ -0,0 +1,9 @@ +CREATE TABLE [dbo].[XdiBatchProcessInfo] +( + [XdiBatchProcessInfoId] [int] NOT NULL PRIMARY KEY IDENTITY, + [StartTimeStamp] DATETIME2 NOT NULL, + [EndTimeStamp] DATETIME2 NULL, + [BatchTotal] INT NOT NULL DEFAULT 0, + [ApiResponse] NVARCHAR(MAX) NULL, + [XdiBatchProcessStatus] INT NOT NULL +) diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/DataTransfer/MemberOptInInformation.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/DataTransfer/MemberOptInInformation.cs index 8786b77..5f24f66 100644 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/DataTransfer/MemberOptInInformation.cs +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/DataTransfer/MemberOptInInformation.cs @@ -1,15 +1,16 @@ using LCU.Library.Internal.MemberPreferencesApiModels.Entities; -namespace LCU.Library.Internal.MemberPreferencesApiModels.DataTransfer; - -public class MemberOptInInformation +namespace LCU.Library.Internal.MemberPreferencesApiModels.DataTransfer { - public MemberOptInInformation(MemberOptInSettings settings, bool hasPendingUpdates) + public class MemberOptInInformation { - MemberOptinSettings = settings; - HasPendingUpdates = hasPendingUpdates; - } + public MemberOptInInformation(MemberOptInSettings settings, bool hasPendingUpdates) + { + MemberOptinSettings = settings; + HasPendingUpdates = hasPendingUpdates; + } - public MemberOptInSettings MemberOptinSettings { get; set; } - public bool HasPendingUpdates { get; set; } + public MemberOptInSettings MemberOptinSettings { get; set; } + public bool HasPendingUpdates { get; set; } + } } diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Entities/ApplicationUser.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Entities/ApplicationUser.cs index 057ff87..60da5ee 100644 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Entities/ApplicationUser.cs +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Entities/ApplicationUser.cs @@ -1,9 +1,10 @@ using LCU.Library.Internal.MemberPreferencesApiModels.Enums; -namespace LCU.Library.Internal.MemberPreferencesApiModels.Entities; - -public class ApplicationUser +namespace LCU.Library.Internal.MemberPreferencesApiModels.Entities { - public string UserName { get; set; } - public UserType UserType { get; set; } + public class ApplicationUser + { + public string UserName { get; set; } + public UserType UserType { get; set; } + } } diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Entities/DeliveryPreference.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Entities/DeliveryPreference.cs index a638ea5..4f77389 100644 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Entities/DeliveryPreference.cs +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Entities/DeliveryPreference.cs @@ -1,26 +1,27 @@ -namespace LCU.Library.Internal.MemberPreferencesApiModels.Entities; - -public static class DeliveryPreference +namespace LCU.Library.Internal.MemberPreferencesApiModels.Entities { - public const string Paper = "Paper"; - public const string Electronic = "Electronic"; - public const string Hold = "Hold"; - public const string Microfiche = "Microfiche"; - - public static string MapMailCodeToPreference(string mailCode) + public static class DeliveryPreference { - if (string.IsNullOrWhiteSpace(mailCode)) return ""; + public const string Paper = "Paper"; + public const string Electronic = "Electronic"; + public const string Hold = "Hold"; + public const string Microfiche = "Microfiche"; - switch (mailCode) + public static string MapMailCodeToPreference(string mailCode) { - case "3": - return DeliveryPreference.Hold; - case "4": - return DeliveryPreference.Microfiche; - case "5": - return DeliveryPreference.Electronic; - default: - return DeliveryPreference.Paper; + if (string.IsNullOrWhiteSpace(mailCode)) return ""; + + switch (mailCode) + { + case "3": + return DeliveryPreference.Hold; + case "4": + return DeliveryPreference.Microfiche; + case "5": + return DeliveryPreference.Electronic; + default: + return DeliveryPreference.Paper; + } } } } diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Entities/DnaAuditProcess.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Entities/DnaAuditProcess.cs index a143562..9f89665 100644 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Entities/DnaAuditProcess.cs +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Entities/DnaAuditProcess.cs @@ -2,13 +2,14 @@ using System; using System.Text.Json.Serialization; using LCU.Library.Internal.MemberPreferencesApiModels.Enums; -namespace LCU.Library.Internal.MemberPreferencesApiModels.Entities; - -public class DnaAuditProcess +namespace LCU.Library.Internal.MemberPreferencesApiModels.Entities { - public int ProcessId { get; set; } - [JsonConverter(typeof(JsonStringEnumConverter))] - public DnaAuditProcessType DnaProcessType { get; set; } - public DateTime LastUpdated { get; set; } - public int ConsecutiveFailures { get; set; } + public class DnaAuditProcess + { + public int ProcessId { get; set; } + [JsonConverter(typeof(JsonStringEnumConverter))] + public DnaAuditProcessType DnaProcessType { get; set; } + public DateTime LastUpdated { get; set; } + public int ConsecutiveFailures { get; set; } + } } diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Entities/IMemberPreferences.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Entities/IMemberPreferences.cs index e80b88f..e09ae02 100644 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Entities/IMemberPreferences.cs +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Entities/IMemberPreferences.cs @@ -1,8 +1,9 @@ using System.Threading.Tasks; -namespace LCU.Library.Internal.MemberPreferencesApiModels.Entities; - -public interface IMemberPreferences +namespace LCU.Library.Internal.MemberPreferencesApiModels.Entities { - Task Add(MemberPreference preferenceChange); + public interface IMemberPreferences + { + Task Add(MemberPreference preferenceChange); + } } diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Entities/MemberPreference.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Entities/MemberPreference.cs index 761b560..3e499d8 100644 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Entities/MemberPreference.cs +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Entities/MemberPreference.cs @@ -2,18 +2,19 @@ using LCU.Library.Internal.MemberPreferencesApiModels.Enums; using LCU.Library.Internal.MemberPreferencesApiModels.Models; using System.Text.Json.Serialization; -namespace LCU.Library.Internal.MemberPreferencesApiModels.Entities; - -public class MemberPreference : Auditable +namespace LCU.Library.Internal.MemberPreferencesApiModels.Entities { - public MemberPreference() + public class MemberPreference : Auditable { - } + public MemberPreference() + { + } - public int Id { get; set; } - public string UserId { get; set; } - [JsonConverter(typeof(JsonStringEnumConverter))] - public PreferenceType Preference { get; set; } - public string Value { get; set; } - public string LegalReference { get; set; } + public int Id { get; set; } + public string UserId { get; set; } + [JsonConverter(typeof(JsonStringEnumConverter))] + public PreferenceType Preference { get; set; } + public string Value { get; set; } + public string LegalReference { get; set; } + } } diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Entities/XdiBatchItem.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Entities/XdiBatchItem.cs index 1dac547..9df7e85 100644 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Entities/XdiBatchItem.cs +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Entities/XdiBatchItem.cs @@ -2,13 +2,14 @@ using System; using System.Text.Json.Serialization; using LCU.Library.Internal.MemberPreferencesApiModels.Enums; -namespace LCU.Library.Internal.MemberPreferencesApiModels.Entities; - -public class XdiBatchItem +namespace LCU.Library.Internal.MemberPreferencesApiModels.Entities { - public string UserId { get; set; } - [JsonConverter(typeof(JsonStringEnumConverter))] - public BatchState BatchState { get; set; } - public DateTime Created { get; set; } - public DateTime LastUpdated { get; set; } + public class XdiBatchItem + { + public string UserId { get; set; } + [JsonConverter(typeof(JsonStringEnumConverter))] + public BatchState BatchState { get; set; } + public DateTime Created { get; set; } + public DateTime LastUpdated { get; set; } + } } diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Entities/XdiBatchProcessInfo.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Entities/XdiBatchProcessInfo.cs new file mode 100644 index 0000000..4141167 --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Entities/XdiBatchProcessInfo.cs @@ -0,0 +1,17 @@ +using LCU.Library.Internal.MemberPreferencesApiModels.Enums; +using System; +using System.ComponentModel.DataAnnotations; + +namespace LCU.Library.Internal.MemberPreferencesApiModels.Entities +{ + public class XdiBatchProcessInfo + { + [Key] + public int XdiBatchProcessInfoId { get; set; } + public DateTime StartTimeStamp { get; set; } + public DateTime EndTimeStamp { get; set; } + public XdiBatchProcessStatus XdiBatchProcessStatus { get; set; } + public int BatchTotal { get; set; } + public string ApiResponse { get; set; } + } +} diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Enums/BatchState.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Enums/BatchState.cs index 7a6b308..6f5e4ab 100644 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Enums/BatchState.cs +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Enums/BatchState.cs @@ -1,7 +1,8 @@ -namespace LCU.Library.Internal.MemberPreferencesApiModels.Enums; - -public enum BatchState +namespace LCU.Library.Internal.MemberPreferencesApiModels.Enums { - New, - TransferPending + public enum BatchState + { + New, + TransferPending + } } diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Enums/DnaAuditProcessType.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Enums/DnaAuditProcessType.cs index d43ea95..795e9f9 100644 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Enums/DnaAuditProcessType.cs +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Enums/DnaAuditProcessType.cs @@ -1,8 +1,9 @@ -namespace LCU.Library.Internal.MemberPreferencesApiModels.Enums; - -public enum DnaAuditProcessType +namespace LCU.Library.Internal.MemberPreferencesApiModels.Enums { - DNAAgreement, - DNAAccounts, - DNAOrganization + public enum DnaAuditProcessType + { + DNAAgreement = 0, + DNAAccounts = 1, + DNAOrganization = 2 + } } diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Enums/EmailStatus.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Enums/EmailStatus.cs index f5b5d7a..30caf53 100644 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Enums/EmailStatus.cs +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Enums/EmailStatus.cs @@ -1,7 +1,8 @@ -namespace LCU.Library.Internal.MemberPreferencesApiModels.Enums; - -public enum EmailStatus +namespace LCU.Library.Internal.MemberPreferencesApiModels.Enums { - FailingDelivery, - DeliveredSuccessfully + public enum EmailStatus + { + FailingDelivery, + DeliveredSuccessfully + } } diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Enums/PreferenceType.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Enums/PreferenceType.cs index 14ecd7a..1817986 100644 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Enums/PreferenceType.cs +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Enums/PreferenceType.cs @@ -1,11 +1,12 @@ -namespace LCU.Library.Internal.MemberPreferencesApiModels.Enums; - -public enum PreferenceType +namespace LCU.Library.Internal.MemberPreferencesApiModels.Enums { - ENotification, - EStatements, - UnifiedOptIn, - ENotificationsEmail, - EStatementsEmail, - UnifiedOptInEmail + public enum PreferenceType + { + ENotification, + EStatements, + UnifiedOptIn, + ENotificationsEmail, + EStatementsEmail, + UnifiedOptInEmail + } } diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Enums/UserType.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Enums/UserType.cs index af51094..93ea820 100644 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Enums/UserType.cs +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Enums/UserType.cs @@ -1,8 +1,9 @@ -namespace LCU.Library.Internal.MemberPreferencesApiModels.Enums; - -public enum UserType +namespace LCU.Library.Internal.MemberPreferencesApiModels.Enums { - Associate, - Member, - System + public enum UserType + { + Associate, + Member, + System + } } diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Enums/XdiBatchProcessStatus.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Enums/XdiBatchProcessStatus.cs new file mode 100644 index 0000000..391ce6c --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Enums/XdiBatchProcessStatus.cs @@ -0,0 +1,9 @@ +namespace LCU.Library.Internal.MemberPreferencesApiModels.Enums +{ + public enum XdiBatchProcessStatus + { + InProgress, + Failed, + Completed + } +} diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Enums/XdiFileType.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Enums/XdiFileType.cs index 830218a..e6687bf 100644 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Enums/XdiFileType.cs +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Enums/XdiFileType.cs @@ -1,10 +1,10 @@ -namespace LCU.Library.Internal.MemberPreferencesApiModels.Enums; - -public enum XdiFileType +namespace LCU.Library.Internal.MemberPreferencesApiModels.Enums { - DeleteMember, - AddMemberElectronic, - UpdateMemberToElectronic, - UpdateMemberToPrint, - UpdateMemberEmail + public enum XdiFileType + { + AddMemberElectronic, + UpdateMemberToElectronic, + UpdateMemberToPrint, + UpdateMemberEmail + } } diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/LCU.Library.Internal.MemberPreferencesApiModels.csproj b/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/LCU.Library.Internal.MemberPreferencesApiModels.csproj index 42787b3..8ba01f2 100644 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/LCU.Library.Internal.MemberPreferencesApiModels.csproj +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/LCU.Library.Internal.MemberPreferencesApiModels.csproj @@ -1,14 +1,21 @@ - net8.0 - 1.2.3 - 1.2.3 - false + netstandard2.1 + True + 1.0.1 + + 1.0.0 - Initial Creation. + 1.0.1 - Add XdiBatchProcessRequest. + + + 1.0.0 - Initial Creation. + 1.0.1 - Add XdiBatchProcessRequest. + - + diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Models/Auditable.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Models/Auditable.cs index 1888000..7ec353e 100644 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Models/Auditable.cs +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Models/Auditable.cs @@ -2,16 +2,17 @@ using System; using System.Text.Json.Serialization; using LCU.Library.Internal.MemberPreferencesApiModels.Enums; -namespace LCU.Library.Internal.MemberPreferencesApiModels.Models; - -public abstract class Auditable +namespace LCU.Library.Internal.MemberPreferencesApiModels.Models { - public string CreatedBy { get; set; } - public DateTime Created { get; set; } - [JsonConverter(typeof(JsonStringEnumConverter))] - public UserType CreatedByType { get; set; } - public string LastUpdatedBy { get; set; } - public DateTime LastUpdated { get; set; } - [JsonConverter(typeof(JsonStringEnumConverter))] - public UserType LastUpdatedByType { get; set; } + public abstract class Auditable + { + public string CreatedBy { get; set; } + public DateTime Created { get; set; } + [JsonConverter(typeof(JsonStringEnumConverter))] + public UserType CreatedByType { get; set; } + public string LastUpdatedBy { get; set; } + public DateTime LastUpdated { get; set; } + [JsonConverter(typeof(JsonStringEnumConverter))] + public UserType LastUpdatedByType { get; set; } + } } diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Models/IAuditableChanges.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Models/IAuditableChanges.cs index 2b2dde6..1ab666d 100644 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Models/IAuditableChanges.cs +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Models/IAuditableChanges.cs @@ -1,6 +1,7 @@ -namespace LCU.Library.Internal.MemberPreferencesApiModels.Models; - -public interface IAuditableChanges +namespace LCU.Library.Internal.MemberPreferencesApiModels.Models { - void SystemModified(Auditable entity, string modifiedBy); + public interface IAuditableChanges + { + void SystemModified(Auditable entity, string modifiedBy); + } } diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Requests/DnaAuditProcessRequest.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Requests/DnaAuditProcessRequest.cs new file mode 100644 index 0000000..2f70e78 --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Requests/DnaAuditProcessRequest.cs @@ -0,0 +1,12 @@ +using LCU.Library.Internal.ApiResponse.Models; +using LCU.Library.Internal.MemberPreferencesApiModels.Enums; + +namespace LCU.Library.Internal.MemberPreferencesApiModels.Requests +{ + public class DnaAuditProcessRequest : ReturnResponse + { + public DnaAuditProcessType DnaAuditProcessType { get; set; } + public int LookBackMinutes { get; set; } + public int NumberOfAllowedConsecutiveFailures { get; set; } + } +} diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Requests/MemberOptinRequest.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Requests/MemberOptinRequest.cs index aa7432d..8f4f5ef 100644 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Requests/MemberOptinRequest.cs +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Requests/MemberOptinRequest.cs @@ -3,56 +3,57 @@ using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; -namespace LCU.Library.Internal.MemberPreferencesApiModels.Requests; - -public class MemberOptinRequest : IValidatableObject +namespace LCU.Library.Internal.MemberPreferencesApiModels.Requests { - [Required] public string UserId { get; set; } - public string Email { get; set; } - [Required] public string Value { get; set; } - [Required] public string LegalReference { get; set; } - - public IEnumerable Validate(ValidationContext validationContext) + public class MemberOptinRequest : IValidatableObject { - var results = new List(); + [Required] public string UserId { get; set; } + public string Email { get; set; } + [Required] public string Value { get; set; } + [Required] public string LegalReference { get; set; } - if (!string.Equals(Value, DeliveryPreference.Electronic, StringComparison.InvariantCultureIgnoreCase) && - !string.Equals(Value, DeliveryPreference.Paper, StringComparison.InvariantCultureIgnoreCase)) + public IEnumerable Validate(ValidationContext validationContext) { - results.Add(new ValidationResult( - $"Invalid Option for Unified Opt-In Preference", - new[] { "Value" })); - } + var results = new List(); - if (string.Equals(Value, DeliveryPreference.Electronic, StringComparison.InvariantCultureIgnoreCase)) - { - if (string.IsNullOrWhiteSpace(Email)) + if (!string.Equals(Value, DeliveryPreference.Electronic, StringComparison.InvariantCultureIgnoreCase) && + !string.Equals(Value, DeliveryPreference.Paper, StringComparison.InvariantCultureIgnoreCase)) { - results.Add(new ValidationResult("Email is required when Opting in", new[] { "Email" })); + results.Add(new ValidationResult( + $"Invalid Option for Unified Opt-In Preference", + new[] { "Value" })); } - else + + if (string.Equals(Value, DeliveryPreference.Electronic, StringComparison.InvariantCultureIgnoreCase)) { - try + if (string.IsNullOrWhiteSpace(Email)) { - var unused = new System.Net.Mail.MailAddress(Email); + results.Add(new ValidationResult("Email is required when Opting in", new[] { "Email" })); } - catch + else { - results.Add(new ValidationResult("Invalid Email Format", new[] { "Email" })); + try + { + var unused = new System.Net.Mail.MailAddress(Email); + } + catch + { + results.Add(new ValidationResult("Invalid Email Format", new[] { "Email" })); + } } } + + return results; } - return results; - } + public bool IsElectronicRequest() + { + return string.Equals(Value, DeliveryPreference.Electronic, StringComparison.InvariantCultureIgnoreCase); + } - public bool IsElectronicRequest() - { - return string.Equals(Value, DeliveryPreference.Electronic, StringComparison.InvariantCultureIgnoreCase); - } - - public bool IsPaperRequest() - { - return string.Equals(Value, DeliveryPreference.Paper, StringComparison.InvariantCultureIgnoreCase); + public bool IsPaperRequest() + { + return string.Equals(Value, DeliveryPreference.Paper, StringComparison.InvariantCultureIgnoreCase); + } } } diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Requests/MemberPreferenceRequest.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Requests/MemberPreferenceRequest.cs index 3b211b4..1e908d8 100644 --- a/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Requests/MemberPreferenceRequest.cs +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Requests/MemberPreferenceRequest.cs @@ -2,17 +2,18 @@ using LCU.Library.Internal.MemberPreferencesApiModels.Enums; using System.ComponentModel.DataAnnotations; using System.Text.Json.Serialization; -namespace LCU.Library.Internal.MemberPreferencesApiModels.Requests; - -public class MemberPreferenceRequest +namespace LCU.Library.Internal.MemberPreferencesApiModels.Requests { - [Required] - public string UserId { get; set; } - [Required] - [JsonConverter(typeof(JsonStringEnumConverter))] - public PreferenceType Preference { get; set; } - [Required] - public string Value { get; set; } - [Required] - public string LegalReference { get; set; } + public class MemberPreferenceRequest + { + [Required] + public string UserId { get; set; } + [Required] + [JsonConverter(typeof(JsonStringEnumConverter))] + public PreferenceType Preference { get; set; } + [Required] + public string Value { get; set; } + [Required] + public string LegalReference { get; set; } + } } diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Requests/XdiBatchProcessRequest.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Requests/XdiBatchProcessRequest.cs new file mode 100644 index 0000000..04e6b24 --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Requests/XdiBatchProcessRequest.cs @@ -0,0 +1,9 @@ +using LCU.Library.Internal.ApiResponse.Models; + +namespace LCU.Library.Internal.MemberPreferencesApiModels.Requests +{ + public class XdiBatchProcessRequest : ReturnResponse + { + public string XdiAppendFileRootBasePath { get; set; } + } +} diff --git a/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Responses/RequestResponse.cs b/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Responses/RequestResponse.cs new file mode 100644 index 0000000..e7b6729 --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Responses/RequestResponse.cs @@ -0,0 +1,31 @@ +using LCU.Library.Internal.ApiResponse.Models; +using System.Collections.Generic; + +namespace LCU.Library.Internal.MemberPreferencesApiModels.Responses +{ + public class RequestResponse + { + public RequestResponse() + { + MessageStack = new List(); + IsSuccessful = true; + ReturnResponse = null; + } + public RequestResponse(ReturnResponse response) + { + MessageStack = new List(); + IsSuccessful = true; + ReturnResponse = response; + } + public RequestResponse(ReturnResponse response, bool success, List messages) + { + MessageStack = messages; + IsSuccessful = success; + ReturnResponse = response; + } + + public List MessageStack { get; set; } + public bool IsSuccessful { get; set; } + public ReturnResponse ReturnResponse { get; set; } + } +} diff --git a/LCU.API.Internal.MemberPreferencesApi/azdo_pipelines/config-files/qa-pvars.yaml b/LCU.API.Internal.MemberPreferencesApi/azdo_pipelines/config-files/qa-pvars.yaml index 91adc5c..9ec57e8 100644 --- a/LCU.API.Internal.MemberPreferencesApi/azdo_pipelines/config-files/qa-pvars.yaml +++ b/LCU.API.Internal.MemberPreferencesApi/azdo_pipelines/config-files/qa-pvars.yaml @@ -9,4 +9,4 @@ variables: pvar_azdo_deployment_environment_db: DB-QA pvar_LCU_API_Internal_MemberPreferencesApiSql_db_name: MemberPreferences - pvar_LCU_API_Internal_MemberPreferencesApiSql_sql_server_name: D1DTB01Q + pvar_LCU_API_Internal_MemberPreferencesApiSql_sql_server_name: DAZCDTBWEB01Q diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/base/Deployment.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/base/Deployment.yaml index 427dc09..b37a121 100644 --- a/LCU.API.Internal.MemberPreferencesApi/kustomize/base/Deployment.yaml +++ b/LCU.API.Internal.MemberPreferencesApi/kustomize/base/Deployment.yaml @@ -18,8 +18,11 @@ spec: labels: app: member-preferences-api spec: + volumes: [] containers: - name: member-preferences-api + env: [] + volumeMounts: [] image: member-preferences-api resources: limits: @@ -39,57 +42,4 @@ spec: httpGet: path: /api/status port: 8080 - volumeMounts: - - name: volume-lcu-internal-cert - mountPath: /etc/ssl/certs/lcu-internal-cert.pem - - name: volume-appsettings - mountPath: /app/config/mapped-appsettings - - name: member-preferences-api-secrets - mountPath: /vault/secrets/member-preferences-api-member-preferences-api-key.json - subPath: member-preferences-api-member-preferences-api-key - readOnly: true - - name: member-preferences-api-secrets - mountPath: /vault/secrets/member-preferences-api-ftp-fingerprint.json - subPath: member-preferences-api-ftp-fingerprint - readOnly: true - - name: member-preferences-api-secrets - mountPath: /vault/secrets/member-preferences-api-ftp-password.json - subPath: member-preferences-api-ftp-password - readOnly: true - - name: member-preferences-api-secrets - mountPath: /vault/secrets/member-preferences-api-ftp-username.json - subPath: member-preferences-api-ftp-username - readOnly: true - - name: member-preferences-api-secrets - mountPath: /vault/secrets/member-preferences-api-queue-password.json - subPath: member-preferences-api-queue-password - readOnly: true - - name: member-preferences-api-secrets - mountPath: /vault/secrets/member-preferences-api-queue-username.json - subPath: member-preferences-api-queue-username - readOnly: true - - name: member-preferences-api-secrets - mountPath: /vault/secrets/member-preferences-api-db-connection.json - subPath: member-preferences-api-db-connection - readOnly: true - - name: member-preferences-api-secrets - mountPath: /vault/secrets/member-preferences-api-environment-from-vault.json - subPath: member-preferences-api-environment-from-vault - readOnly: true - - name: member-preferences-api-secrets - mountPath: /vault/secrets/member-preferences-api-seq-api-key.json - subPath: member-preferences-api-seq-api-key - readOnly: true - volumes: - - name: member-preferences-api-secrets - csi: - driver: secrets-store.csi.k8s.io - readOnly: true - volumeAttributes: - secretProviderClass: member-preferences-api-csi-key-vault-secrets-provider - - name: volume-lcu-internal-cert - configMap: - name: configmap-lcu-internal-cert - - name: volume-appsettings - configMap: - name: memberpreferencesapi-configmap + \ No newline at end of file diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/base/kustomization.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/base/kustomization.yaml index 9bde637..18cdb34 100644 --- a/LCU.API.Internal.MemberPreferencesApi/kustomize/base/kustomization.yaml +++ b/LCU.API.Internal.MemberPreferencesApi/kustomize/base/kustomization.yaml @@ -3,3 +3,7 @@ resources: - Service.yaml - virtual-service.yaml - secrets-provider-class.yaml + +images: +- name: member-preferences-api + newName: landmarkcu/lcu.api.internal.memberpreferences-memberpreferences \ No newline at end of file diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/base/secrets-provider-class.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/base/secrets-provider-class.yaml index 14cc34f..9c5042e 100644 --- a/LCU.API.Internal.MemberPreferencesApi/kustomize/base/secrets-provider-class.yaml +++ b/LCU.API.Internal.MemberPreferencesApi/kustomize/base/secrets-provider-class.yaml @@ -9,41 +9,4 @@ spec: usePodIdentity: "false" useVMManagedIdentity: "true" tenantId: 63cd1554-2783-4a86-ae50-b9e6c21c9499 - objects: | - array: - - | - objectName: member-preferences-api-seq-api-key - objectType: secret - objectVersion: "" - - | - objectName: member-preferences-api-environment-from-vault - objectType: secret - objectVersion: "" - - | - objectName: member-preferences-api-db-connection - objectType: secret - objectVersion: "" - - | - objectName: member-preferences-api-queue-username - objectType: secret - objectVersion: "" - - | - objectName: member-preferences-api-queue-password - objectType: secret - objectVersion: "" - - | - objectName: member-preferences-api-ftp-username - objectType: secret - objectVersion: "" - - | - objectName: member-preferences-api-ftp-password - objectType: secret - objectVersion: "" - - | - objectName: member-preferences-api-ftp-fingerprint - objectType: secret - objectVersion: "" - - | - objectName: member-preferences-api-member-preferences-api-key - objectType: secret - objectVersion: "" + \ No newline at end of file diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/base/virtual-service.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/base/virtual-service.yaml index f067499..c5829a8 100644 --- a/LCU.API.Internal.MemberPreferencesApi/kustomize/base/virtual-service.yaml +++ b/LCU.API.Internal.MemberPreferencesApi/kustomize/base/virtual-service.yaml @@ -4,6 +4,7 @@ kind: VirtualService metadata: name: member-preferences-api spec: + hosts: [] gateways: - istio-system/ingress-gateway http: diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/components/keyvaults/normal/kustomization.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/components/keyvaults/normal/kustomization.yaml new file mode 100644 index 0000000..0ae1552 --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/kustomize/components/keyvaults/normal/kustomization.yaml @@ -0,0 +1,10 @@ +apiVersion: kustomize.config.k8s.io/v1alpha1 +kind: Component + +patches: + - target: + kind: Deployment + path: set_secrets_deployment.yaml + - target: + kind: SecretProviderClass + path: set_secrets_provider.yaml diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/components/keyvaults/normal/set_secrets_deployment.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/components/keyvaults/normal/set_secrets_deployment.yaml new file mode 100644 index 0000000..c009bf2 --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/kustomize/components/keyvaults/normal/set_secrets_deployment.yaml @@ -0,0 +1,57 @@ +- op: add + path: /spec/template/spec/volumes/- + value: + name: member-preferences-api-secrets + csi: + driver: secrets-store.csi.k8s.io + readOnly: true + volumeAttributes: + secretProviderClass: member-preferences-api-csi-key-vault-secrets-provider + +- op: add + path: /spec/template/spec/containers/0/volumeMounts/- + value: + name: member-preferences-api-secrets + mountPath: /vault/secrets/member-preferences-api-member-preferences-api-key.json + readOnly: true + subPath: member-preferences-api-member-preferences-api-key + +- op: add + path: /spec/template/spec/containers/0/volumeMounts/- + value: + name: member-preferences-api-secrets + mountPath: /vault/secrets/member-preferences-api-queue-password.json + readOnly: true + subPath: member-preferences-api-queue-password + +- op: add + path: /spec/template/spec/containers/0/volumeMounts/- + value: + name: member-preferences-api-secrets + mountPath: /vault/secrets/member-preferences-api-queue-username.json + readOnly: true + subPath: member-preferences-api-queue-username + +- op: add + path: /spec/template/spec/containers/0/volumeMounts/- + value: + name: member-preferences-api-secrets + mountPath: /vault/secrets/member-preferences-api-db-connection.json + readOnly: true + subPath: member-preferences-api-db-connection + +- op: add + path: /spec/template/spec/containers/0/volumeMounts/- + value: + name: member-preferences-api-secrets + mountPath: /vault/secrets/member-preferences-api-environment-from-vault.json + readOnly: true + subPath: member-preferences-api-environment-from-vault + +- op: add + path: /spec/template/spec/containers/0/volumeMounts/- + value: + name: member-preferences-api-secrets + mountPath: /vault/secrets/member-preferences-api-seq-api-key.json + readOnly: true + subPath: member-preferences-api-seq-api-key diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/components/keyvaults/normal/set_secrets_provider.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/components/keyvaults/normal/set_secrets_provider.yaml new file mode 100644 index 0000000..c5d09e8 --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/kustomize/components/keyvaults/normal/set_secrets_provider.yaml @@ -0,0 +1,28 @@ +- op: add + path: /spec/parameters/objects + value: | + array: + - | + objectName: member-preferences-api-member-preferences-api-key + objectType: secret + objectVersion: "" + - | + objectName: member-preferences-api-queue-password + objectType: secret + objectVersion: "" + - | + objectName: member-preferences-api-queue-username + objectType: secret + objectVersion: "" + - | + objectName: member-preferences-api-db-connection + objectType: secret + objectVersion: "" + - | + objectName: member-preferences-api-environment-from-vault + objectType: secret + objectVersion: "" + - | + objectName: member-preferences-api-seq-api-key + objectType: secret + objectVersion: "" diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/components/workloads/dna-audit/appsettings/appsettings.json b/LCU.API.Internal.MemberPreferencesApi/kustomize/components/workloads/dna-audit/appsettings/appsettings.json new file mode 100644 index 0000000..2a8619a --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/kustomize/components/workloads/dna-audit/appsettings/appsettings.json @@ -0,0 +1,8 @@ +{ + "Primary": { + "FeatureFlags": { + "RunXdiBatchProcessConsumer": false, + "RunDnaAuditProcessConsumer": true + } + } +} diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/components/workloads/dna-audit/kustomization.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/components/workloads/dna-audit/kustomization.yaml new file mode 100644 index 0000000..1d89f66 --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/kustomize/components/workloads/dna-audit/kustomization.yaml @@ -0,0 +1,40 @@ +apiVersion: kustomize.config.k8s.io/v1alpha1 +kind: Component + +#Test istio process +namePrefix: dna-audit- + +configMapGenerator: + - name: member-preferences-api-appsettings + files: + - appsettings/appsettings.json +generatorOptions: + disableNameSuffixHash: true + +patches: + - target: + kind: Deployment + path: set_appsettings_deployment.yaml + +replacements: + - source: + kind: Deployment + fieldPath: metadata.name + targets: + - select: + kind: Deployment + fieldPaths: + - spec.selector.matchLabels.app + - spec.template.metadata.labels.app + - spec.template.spec.containers.*.name + + - select: + kind: Service + fieldPaths: + - spec.selector.app + + - select: + kind: VirtualService + fieldPaths: + - spec.http.*.route.*.destination.host + - spec.http.*.name diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/components/workloads/dna-audit/set_appsettings_deployment.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/components/workloads/dna-audit/set_appsettings_deployment.yaml new file mode 100644 index 0000000..e1f51eb --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/kustomize/components/workloads/dna-audit/set_appsettings_deployment.yaml @@ -0,0 +1,12 @@ +- op: add + path: /spec/template/spec/volumes/- + value: + name: volume-appsettings + configMap: + name: member-preferences-api-appsettings + +- op: add + path: /spec/template/spec/containers/0/volumeMounts/- + value: + name: volume-appsettings + mountPath: /app/config/workload-appsettings diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/components/workloads/normal/appsettings/appsettings.json b/LCU.API.Internal.MemberPreferencesApi/kustomize/components/workloads/normal/appsettings/appsettings.json new file mode 100644 index 0000000..d758da9 --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/kustomize/components/workloads/normal/appsettings/appsettings.json @@ -0,0 +1,10 @@ +{ + "Primary": { + "FeatureFlags": { + "RunHostedServices": true, + "RunXdiBatchProcessConsumer": true, + "RunXdiSshResponseConsumer": true, + "RunDnaAuditProcessConsumer": false + } + } +} diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/components/workloads/normal/kustomization.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/components/workloads/normal/kustomization.yaml new file mode 100644 index 0000000..b4ccd5b --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/kustomize/components/workloads/normal/kustomization.yaml @@ -0,0 +1,40 @@ +apiVersion: kustomize.config.k8s.io/v1alpha1 +kind: Component + +#Test istio process +namePrefix: normal- + +configMapGenerator: + - name: member-preferences-api-appsettings + files: + - appsettings/appsettings.json +generatorOptions: + disableNameSuffixHash: true + +patches: + - target: + kind: Deployment + path: set_appsettings_deployment.yaml + +replacements: + - source: + kind: Deployment + fieldPath: metadata.name + targets: + - select: + kind: Deployment + fieldPaths: + - spec.selector.matchLabels.app + - spec.template.metadata.labels.app + - spec.template.spec.containers.*.name + + - select: + kind: Service + fieldPaths: + - spec.selector.app + + - select: + kind: VirtualService + fieldPaths: + - spec.http.*.route.*.destination.host + - spec.http.*.name diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/components/workloads/normal/set_appsettings_deployment.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/components/workloads/normal/set_appsettings_deployment.yaml new file mode 100644 index 0000000..e1f51eb --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/kustomize/components/workloads/normal/set_appsettings_deployment.yaml @@ -0,0 +1,12 @@ +- op: add + path: /spec/template/spec/volumes/- + value: + name: volume-appsettings + configMap: + name: member-preferences-api-appsettings + +- op: add + path: /spec/template/spec/containers/0/volumeMounts/- + value: + name: volume-appsettings + mountPath: /app/config/workload-appsettings diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/components/workloads/xdi-batch/appsettings/appsettings.json b/LCU.API.Internal.MemberPreferencesApi/kustomize/components/workloads/xdi-batch/appsettings/appsettings.json new file mode 100644 index 0000000..2c83e32 --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/kustomize/components/workloads/xdi-batch/appsettings/appsettings.json @@ -0,0 +1,8 @@ +{ + "Primary": { + "FeatureFlags": { + "RunXdiBatchProcessConsumer": true, + "RunDnaAuditProcessConsumer": false + } + } +} diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/components/workloads/xdi-batch/kustomization.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/components/workloads/xdi-batch/kustomization.yaml new file mode 100644 index 0000000..41f6f24 --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/kustomize/components/workloads/xdi-batch/kustomization.yaml @@ -0,0 +1,39 @@ +apiVersion: kustomize.config.k8s.io/v1alpha1 +kind: Component + +namePrefix: xdi-batch- + +configMapGenerator: + - name: member-preferences-api-appsettings + files: + - appsettings/appsettings.json +generatorOptions: + disableNameSuffixHash: true + +patches: + - target: + kind: Deployment + path: set_appsettings_deployment.yaml + +replacements: + - source: + kind: Deployment + fieldPath: metadata.name + targets: + - select: + kind: Deployment + fieldPaths: + - spec.selector.matchLabels.app + - spec.template.metadata.labels.app + - spec.template.spec.containers.*.name + + - select: + kind: Service + fieldPaths: + - spec.selector.app + + - select: + kind: VirtualService + fieldPaths: + - spec.http.*.route.*.destination.host + - spec.http.*.name diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/components/workloads/xdi-batch/set_appsettings_deployment.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/components/workloads/xdi-batch/set_appsettings_deployment.yaml new file mode 100644 index 0000000..e1f51eb --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/kustomize/components/workloads/xdi-batch/set_appsettings_deployment.yaml @@ -0,0 +1,12 @@ +- op: add + path: /spec/template/spec/volumes/- + value: + name: volume-appsettings + configMap: + name: member-preferences-api-appsettings + +- op: add + path: /spec/template/spec/containers/0/volumeMounts/- + value: + name: volume-appsettings + mountPath: /app/config/workload-appsettings diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/local/kustomization.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/local/kustomization.yaml index 25a65b6..85b2412 100644 --- a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/local/kustomization.yaml +++ b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/local/kustomization.yaml @@ -1,2 +1,14 @@ resources: - normal + +configMapGenerator: + - name: member-preferences-api-environment-appsettings + files: + - appsettings/appsettings.json +generatorOptions: + disableNameSuffixHash: true + +patches: + - target: + kind: Deployment + path: set_configmap_deployment.yaml \ No newline at end of file diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/local/normal/configmap.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/local/normal/configmap.yaml index 3399899..8626749 100644 --- a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/local/normal/configmap.yaml +++ b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/local/normal/configmap.yaml @@ -9,11 +9,9 @@ data: "AppName": "Member Preferences Api", "SeqUrl": "https://qa-seq.lcu-internal.com", "XdiBatchProcessCronSchedule": "1 5-18 * * *", - "DnaDataAuditProcessCronSchedule": "*/5 3-19 * * *", + "DnaDataAuditProcessCronSchedule": "*/30 3-19 * * *", "FeatureFlags": { - "RunHostedServices": true, "RunXdiBatchProcessConsumer": true, - "RunXdiSshResponseConsumer": true, "RunAccountDnaFieldChangeConsumer": true, "RunAgreementDnaFieldChangeConsumer": true, "RunOrganizationDnaFieldChangeConsumer": true @@ -39,17 +37,15 @@ data: "TestEmailList": [ "ITDevelopment@landmarkcu.onmicrosoft.com" ], "ShouldSendRealEmails": false }, - "FtpApiConfiguration": { - "Url": "https://qa-ftpapi.lcu-internal.com/" - }, - "XdiSftpApiConfiguration": { - "HostName": "10.147.44.23", - "PortNumber": 22, - "SftpRootBasePath": "/home/devops/" + "FileOperationsApiConfiguration": { + "Url": "https://qa-fileoperationsapi.lcu-internal.com/" }, "CoreApiWrapperConfiguration": { "CoreApiBaseUrl": "https://qa-core-api-wrapper-api.apps.azure.lcu-internal.com/api/core/" }, + "ScanBiCoreApiWrapperConfiguration": { + "ScanBiCoreApiWrapperUrl": "https://qa-scanbi-core-api-wrapper-api.apps.azure.lcu-internal.com/api/core/" + }, "ConnectionConfiguration": { "HostUrl": "qa-rabbitmq.lcu-internal.com" }, diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/local/normal/kustomization.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/local/normal/kustomization.yaml index 6dd0c3b..b680cc2 100644 --- a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/local/normal/kustomization.yaml +++ b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/local/normal/kustomization.yaml @@ -2,4 +2,4 @@ resources: - configmap.yaml - ../common patchesStrategicMerge: - - set_virtual_service.yaml + - set_virtual_service.yaml \ No newline at end of file diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/prd/appsettings/appsettings.json b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/prd/appsettings/appsettings.json new file mode 100644 index 0000000..ba7f095 --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/prd/appsettings/appsettings.json @@ -0,0 +1,41 @@ +{ + "Primary": { + "AppName": "Member Preferences Api", + "SeqUrl": "https://seq.lcu-internal.com", + "FeatureGates": { + "EnableControllers": true, + "BounceBackNotifications": false + } + }, + "ApiHealthCheckConfiguration": { + "VaultStatusConfiguration": { + "RunVaultStatusCheck": true, + "EnvironmentFromConfigmap": "PROD" + } + }, + "SqlConnectionConfiguration": { + "MaxRetryCount": 3, + "MaxRetryDelay": "00:00:30" + }, + "NotificationApiConfiguration": { + "Url": "https://prd-notifications-api.apps.azure.lcu-internal.com/api/", + "DNACoreErrorEmailList": [ "ITDevelopment@landmarkcu.onmicrosoft.com", "OperationsQC@landmarkcu.com" ], + "TestEmailList": [], + "ShouldSendRealEmails": true + }, + "FileOperationsApiConfiguration": { + "Url": "https://fileoperationsapi.lcu-internal.com/api/" + }, + "CoreApiWrapperConfiguration": { + "CoreApiBaseUrl": "https://prd-core-api-wrapper-api.apps.azure.lcu-internal.com/api/core/" + }, + "ScanBiCoreApiWrapperConfiguration": { + "ScanBiCoreApiWrapperUrl": "https://prd-scanbi-core-api-wrapper-api.apps.azure.lcu-internal.com/api/core/" + }, + "ConnectionConfiguration": { + "HostUrl": "rabbitmq.lcu-internal.com" + }, + "ApiSecurityConfiguration": { + "ApiKeyAuthenticationFailureBehavior": "Error" + } +} diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/prd/common/kustomization.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/prd/common/kustomization.yaml deleted file mode 100644 index 2a7f26f..0000000 --- a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/prd/common/kustomization.yaml +++ /dev/null @@ -1,8 +0,0 @@ -resources: - - ../../../base -patchesStrategicMerge: - - set_appsettings_deployment.yaml - - set_secrets_provider_class.yaml -images: -- name: member-preferences-api - newName: landmarkcu/lcu.api.internal.memberpreferences-memberpreferences diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/prd/common/set_appsettings_deployment.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/prd/common/set_appsettings_deployment.yaml deleted file mode 100644 index 5d09e27..0000000 --- a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/prd/common/set_appsettings_deployment.yaml +++ /dev/null @@ -1,12 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: member-preferences-api -spec: - template: - spec: - containers: - - name: member-preferences-api - env: - - name: ASPNETCORE_ENVIRONMENT - value: "Production" diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/prd/common/set_secrets_provider_class.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/prd/common/set_secrets_provider_class.yaml deleted file mode 100644 index a63ee33..0000000 --- a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/prd/common/set_secrets_provider_class.yaml +++ /dev/null @@ -1,9 +0,0 @@ ---- -apiVersion: secrets-store.csi.x-k8s.io/v1 -kind: SecretProviderClass -metadata: - name: member-preferences-api-csi-key-vault-secrets-provider -spec: - parameters: - userAssignedIdentityID: 9eaefc49-e5d3-48d4-a2b9-b42cf2d8ca03 - keyvaultName: kv-lz-apps-prod-uscz diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/prd/component/kustomization.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/prd/component/kustomization.yaml new file mode 100644 index 0000000..75fab81 --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/prd/component/kustomization.yaml @@ -0,0 +1,10 @@ +apiVersion: kustomize.config.k8s.io/v1alpha1 +kind: Component + +patches: + - target: + kind: Deployment + path: set_appsettings_deployment.yaml + - target: + kind: SecretProviderClass + path: set_secrets_provider_class.yaml \ No newline at end of file diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/prd/component/set_appsettings_deployment.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/prd/component/set_appsettings_deployment.yaml new file mode 100644 index 0000000..335b8be --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/prd/component/set_appsettings_deployment.yaml @@ -0,0 +1,5 @@ +- op: add + path: /spec/template/spec/containers/0/env/- + value: + name: ASPNETCORE_ENVIRONMENT + value: "Production" \ No newline at end of file diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/prd/component/set_secrets_provider_class.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/prd/component/set_secrets_provider_class.yaml new file mode 100644 index 0000000..816f14c --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/prd/component/set_secrets_provider_class.yaml @@ -0,0 +1,7 @@ +- op: add + path: /spec/parameters/userAssignedIdentityID + value: 9eaefc49-e5d3-48d4-a2b9-b42cf2d8ca03 + +- op: add + path: /spec/parameters/keyvaultName + value: kv-lz-apps-prod-uscz diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/prd/dna-audit/kustomization.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/prd/dna-audit/kustomization.yaml new file mode 100644 index 0000000..0243aae --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/prd/dna-audit/kustomization.yaml @@ -0,0 +1,12 @@ +resources: + - ../../../base + +components: + - ../component + - ../../../components/keyvaults/normal + - ../../../components/workloads/dna-audit + +patches: + - target: + kind: VirtualService + path: set_virtual_service.yaml \ No newline at end of file diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/prd/dna-audit/set_virtual_service.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/prd/dna-audit/set_virtual_service.yaml new file mode 100644 index 0000000..96ac68d --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/prd/dna-audit/set_virtual_service.yaml @@ -0,0 +1,3 @@ +- op: add + path: /spec/hosts/- + value: prd-member-preferences-dna-audit-api.apps.azure.lcu-internal.com \ No newline at end of file diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/prd/kustomization.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/prd/kustomization.yaml index 25a65b6..135ec75 100644 --- a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/prd/kustomization.yaml +++ b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/prd/kustomization.yaml @@ -1,2 +1,16 @@ resources: - normal + - dna-audit + - xdi-batch + +configMapGenerator: + - name: member-preferences-api-environment-appsettings + files: + - appsettings/appsettings.json +generatorOptions: + disableNameSuffixHash: true + +patches: + - target: + kind: Deployment + path: set_configmap_deployment.yaml diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/prd/normal/configmap.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/prd/normal/configmap.yaml deleted file mode 100644 index 0f5aaab..0000000 --- a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/prd/normal/configmap.yaml +++ /dev/null @@ -1,63 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: memberpreferencesapi-configmap -data: - primary.json: | - { - "Primary": { - "AppName": "Member Preferences Api", - "SeqUrl": "https://seq.lcu-internal.com", - "XdiBatchProcessCronSchedule": "1 * * * *", - "DnaDataAuditProcessCronSchedule": "*/5 3-19 * * *", - "FeatureFlags": { - "RunHostedServices": true, - "RunXdiBatchProcessConsumer": true, - "RunXdiSshResponseConsumer": true, - "RunAccountDnaFieldChangeConsumer": true, - "RunAgreementDnaFieldChangeConsumer": true, - "RunOrganizationDnaFieldChangeConsumer": true - }, - "FeatureGates": { - "EnableControllers": true, - "BounceBackNotifications": false - } - }, - "ApiHealthCheckConfiguration": { - "VaultStatusConfiguration": { - "RunVaultStatusCheck": true, - "EnvironmentFromConfigmap": "PROD" - } - }, - "SqlConnectionConfiguration": { - "MaxRetryCount": 3, - "MaxRetryDelay": "00:00:30" - }, - "NotificationApiConfiguration": { - "Url": "https://notificationsapi.lcu-internal.com/api/", - "DNACoreErrorEmailList": [ "ITDevelopment@landmarkcu.onmicrosoft.com", "OperationsQC@landmarkcu.com" ], - "TestEmailList": [], - "ShouldSendRealEmails": true - }, - "FtpApiConfiguration": { - "Url": "https://ftpapi.lcu-internal.com/" - }, - "XdiSftpApiConfiguration": { - "HostName": "sftp.xdi.com", - "PortNumber": 22, - "SftpRootBasePath": "" - }, - "CoreApiWrapperConfiguration": { - "CoreApiBaseUrl": "https://prd-core-api-wrapper-api.apps.azure.lcu-internal.com/api/core/" - }, - "ConnectionConfiguration": { - "HostUrl": "rabbitmq.lcu-internal.com" - }, - "DnaAuditProcessConfiguration": { - "LookBackMinutes": -5, - "NumberOfAllowedConsecutiveFailures": 12 - }, - "ApiSecurityConfiguration": { - "ApiKeyAuthenticationFailureBehavior": "Error" - } - } diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/prd/normal/kustomization.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/prd/normal/kustomization.yaml index 6dd0c3b..b99cbe1 100644 --- a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/prd/normal/kustomization.yaml +++ b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/prd/normal/kustomization.yaml @@ -1,5 +1,12 @@ resources: - - configmap.yaml - - ../common -patchesStrategicMerge: - - set_virtual_service.yaml + - ../../../base + +components: + - ../component + - ../../../components/keyvaults/normal + - ../../../components/workloads/normal + +patches: + - target: + kind: VirtualService + path: set_virtual_service.yaml \ No newline at end of file diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/prd/normal/set_virtual_service.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/prd/normal/set_virtual_service.yaml index 42af822..df155a6 100644 --- a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/prd/normal/set_virtual_service.yaml +++ b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/prd/normal/set_virtual_service.yaml @@ -1,8 +1,3 @@ ---- -apiVersion: networking.istio.io/v1beta1 -kind: VirtualService -metadata: - name: member-preferences-api -spec: - hosts: - - prd-member-preferences-api.apps.azure.lcu-internal.com +- op: add + path: /spec/hosts/- + value: prd-member-preferences-api.apps.azure.lcu-internal.com \ No newline at end of file diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/prd/set_configmap_deployment.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/prd/set_configmap_deployment.yaml new file mode 100644 index 0000000..2eeb4ae --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/prd/set_configmap_deployment.yaml @@ -0,0 +1,12 @@ +- op: add + path: /spec/template/spec/volumes/- + value: + name: volume-environment-appsettings + configMap: + name: member-preferences-api-environment-appsettings + +- op: add + path: /spec/template/spec/containers/0/volumeMounts/- + value: + name: volume-environment-appsettings + mountPath: /app/config/environment-appsettings diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/prd/xdi-batch/kustomization.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/prd/xdi-batch/kustomization.yaml new file mode 100644 index 0000000..77b95fb --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/prd/xdi-batch/kustomization.yaml @@ -0,0 +1,12 @@ +resources: + - ../../../base + +components: + - ../component + - ../../../components/keyvaults/normal + - ../../../components/workloads/xdi-batch + +patches: + - target: + kind: VirtualService + path: set_virtual_service.yaml diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/prd/xdi-batch/set_virtual_service.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/prd/xdi-batch/set_virtual_service.yaml new file mode 100644 index 0000000..6b21f17 --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/prd/xdi-batch/set_virtual_service.yaml @@ -0,0 +1,3 @@ +- op: add + path: /spec/hosts/- + value: prd-member-preferences-xdi-batch-api.apps.azure.lcu-internal.com diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/qa/appsettings/appsettings.json b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/qa/appsettings/appsettings.json new file mode 100644 index 0000000..2da39a5 --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/qa/appsettings/appsettings.json @@ -0,0 +1,41 @@ +{ + "Primary": { + "AppName": "Member Preferences Api", + "SeqUrl": "https://qa-seq.lcu-internal.com", + "FeatureGates": { + "EnableControllers": true, + "BounceBackNotifications": true + } + }, + "ApiHealthCheckConfiguration": { + "VaultStatusConfiguration": { + "RunVaultStatusCheck": true, + "EnvironmentFromConfigmap": "QA" + } + }, + "SqlConnectionConfiguration": { + "MaxRetryCount": 3, + "MaxRetryDelay": "00:00:30" + }, + "NotificationApiConfiguration": { + "Url": "https://qa-notifications-api.apps.azure.lcu-internal.com/api/", + "DNACoreErrorEmailList": [ "ITDevelopment@landmarkcu.onmicrosoft.com" ], + "TestEmailList": [ "ITDevelopment@landmarkcu.onmicrosoft.com" ], + "ShouldSendRealEmails": false + }, + "FileOperationsApiConfiguration": { + "Url": "https://qa-fileoperationsapi.lcu-internal.com/api/" + }, + "CoreApiWrapperConfiguration": { + "CoreApiBaseUrl": "https://qa-core-api-wrapper-api.apps.azure.lcu-internal.com/api/core/" + }, + "ScanBiCoreApiWrapperConfiguration": { + "ScanBiCoreApiWrapperUrl": "https://qa-scanbi-core-api-wrapper-api.apps.azure.lcu-internal.com/api/core/" + }, + "ConnectionConfiguration": { + "HostUrl": "qa-rabbitmq.lcu-internal.com" + }, + "ApiSecurityConfiguration": { + "ApiKeyAuthenticationFailureBehavior": "Error" + } +} diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/qa/common/kustomization.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/qa/common/kustomization.yaml deleted file mode 100644 index 2a7f26f..0000000 --- a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/qa/common/kustomization.yaml +++ /dev/null @@ -1,8 +0,0 @@ -resources: - - ../../../base -patchesStrategicMerge: - - set_appsettings_deployment.yaml - - set_secrets_provider_class.yaml -images: -- name: member-preferences-api - newName: landmarkcu/lcu.api.internal.memberpreferences-memberpreferences diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/qa/common/set_appsettings_deployment.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/qa/common/set_appsettings_deployment.yaml deleted file mode 100644 index 9f4776d..0000000 --- a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/qa/common/set_appsettings_deployment.yaml +++ /dev/null @@ -1,12 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: member-preferences-api -spec: - template: - spec: - containers: - - name: member-preferences-api - env: - - name: ASPNETCORE_ENVIRONMENT - value: "Development" diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/qa/common/set_secrets_provider_class.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/qa/common/set_secrets_provider_class.yaml deleted file mode 100644 index f951378..0000000 --- a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/qa/common/set_secrets_provider_class.yaml +++ /dev/null @@ -1,9 +0,0 @@ ---- -apiVersion: secrets-store.csi.x-k8s.io/v1 -kind: SecretProviderClass -metadata: - name: member-preferences-api-csi-key-vault-secrets-provider -spec: - parameters: - userAssignedIdentityID: 3286ed9a-f85c-4c50-b742-dbd3c1c3fe1f - keyvaultName: kv-lz-apps-qa-uscz diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/qa/component/kustomization.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/qa/component/kustomization.yaml new file mode 100644 index 0000000..75fab81 --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/qa/component/kustomization.yaml @@ -0,0 +1,10 @@ +apiVersion: kustomize.config.k8s.io/v1alpha1 +kind: Component + +patches: + - target: + kind: Deployment + path: set_appsettings_deployment.yaml + - target: + kind: SecretProviderClass + path: set_secrets_provider_class.yaml \ No newline at end of file diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/qa/component/set_appsettings_deployment.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/qa/component/set_appsettings_deployment.yaml new file mode 100644 index 0000000..818dec4 --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/qa/component/set_appsettings_deployment.yaml @@ -0,0 +1,5 @@ +- op: add + path: /spec/template/spec/containers/0/env/- + value: + name: ASPNETCORE_ENVIRONMENT + value: Development \ No newline at end of file diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/qa/component/set_secrets_provider_class.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/qa/component/set_secrets_provider_class.yaml new file mode 100644 index 0000000..8719a77 --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/qa/component/set_secrets_provider_class.yaml @@ -0,0 +1,7 @@ +- op: add + path: /spec/parameters/userAssignedIdentityID + value: 3286ed9a-f85c-4c50-b742-dbd3c1c3fe1f + +- op: add + path: /spec/parameters/keyvaultName + value: kv-lz-apps-qa-uscz diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/qa/dna-audit/kustomization.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/qa/dna-audit/kustomization.yaml new file mode 100644 index 0000000..0243aae --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/qa/dna-audit/kustomization.yaml @@ -0,0 +1,12 @@ +resources: + - ../../../base + +components: + - ../component + - ../../../components/keyvaults/normal + - ../../../components/workloads/dna-audit + +patches: + - target: + kind: VirtualService + path: set_virtual_service.yaml \ No newline at end of file diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/qa/dna-audit/set_virtual_service.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/qa/dna-audit/set_virtual_service.yaml new file mode 100644 index 0000000..1e228fc --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/qa/dna-audit/set_virtual_service.yaml @@ -0,0 +1,3 @@ +- op: add + path: /spec/hosts/- + value: qa-member-preferences-dna-audit-api.apps.azure.lcu-internal.com \ No newline at end of file diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/qa/kustomization.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/qa/kustomization.yaml index 25a65b6..135ec75 100644 --- a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/qa/kustomization.yaml +++ b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/qa/kustomization.yaml @@ -1,2 +1,16 @@ resources: - normal + - dna-audit + - xdi-batch + +configMapGenerator: + - name: member-preferences-api-environment-appsettings + files: + - appsettings/appsettings.json +generatorOptions: + disableNameSuffixHash: true + +patches: + - target: + kind: Deployment + path: set_configmap_deployment.yaml diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/qa/normal/configmap.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/qa/normal/configmap.yaml deleted file mode 100644 index b164bb9..0000000 --- a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/qa/normal/configmap.yaml +++ /dev/null @@ -1,63 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: memberpreferencesapi-configmap -data: - primary.json: | - { - "Primary": { - "AppName": "Member Preferences Api", - "SeqUrl": "https://qa-seq.lcu-internal.com", - "XdiBatchProcessCronSchedule": "1 5-18 * * *", - "DnaDataAuditProcessCronSchedule": "*/5 3-19 * * *", - "FeatureFlags": { - "RunHostedServices": false, - "RunXdiBatchProcessConsumer": false, - "RunXdiSshResponseConsumer": true, - "RunAccountDnaFieldChangeConsumer": false, - "RunAgreementDnaFieldChangeConsumer": false, - "RunOrganizationDnaFieldChangeConsumer": false - }, - "FeatureGates": { - "EnableControllers": true, - "BounceBackNotifications": true - } - }, - "ApiHealthCheckConfiguration": { - "VaultStatusConfiguration": { - "RunVaultStatusCheck": true, - "EnvironmentFromConfigmap": "QA" - } - }, - "SqlConnectionConfiguration": { - "MaxRetryCount": 3, - "MaxRetryDelay": "00:00:30" - }, - "NotificationApiConfiguration": { - "Url": "https://qa-notificationsapi.lcu-internal.com/api/", - "DNACoreErrorEmailList": [ "ITDevelopment@landmarkcu.onmicrosoft.com" ], - "TestEmailList": [ "ITDevelopment@landmarkcu.onmicrosoft.com" ], - "ShouldSendRealEmails": false - }, - "FtpApiConfiguration": { - "Url": "https://qa-ftpapi.lcu-internal.com/" - }, - "XdiSftpApiConfiguration": { - "HostName": "10.147.44.23", - "PortNumber": 22, - "SftpRootBasePath": "/home/devops/" - }, - "CoreApiWrapperConfiguration": { - "CoreApiBaseUrl": "https://qa-core-api-wrapper-api.apps.azure.lcu-internal.com/api/core/" - }, - "ConnectionConfiguration":{ - "HostUrl": "qa-rabbitmq.lcu-internal.com" - }, - "DnaAuditProcessConfiguration": { - "LookBackMinutes": -5, - "NumberOfAllowedConsecutiveFailures": 12 - }, - "ApiSecurityConfiguration": { - "ApiKeyAuthenticationFailureBehavior": "Error" - } - } diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/qa/normal/kustomization.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/qa/normal/kustomization.yaml index 6dd0c3b..b99cbe1 100644 --- a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/qa/normal/kustomization.yaml +++ b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/qa/normal/kustomization.yaml @@ -1,5 +1,12 @@ resources: - - configmap.yaml - - ../common -patchesStrategicMerge: - - set_virtual_service.yaml + - ../../../base + +components: + - ../component + - ../../../components/keyvaults/normal + - ../../../components/workloads/normal + +patches: + - target: + kind: VirtualService + path: set_virtual_service.yaml \ No newline at end of file diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/qa/normal/set_virtual_service.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/qa/normal/set_virtual_service.yaml index 0851721..99f52a4 100644 --- a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/qa/normal/set_virtual_service.yaml +++ b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/qa/normal/set_virtual_service.yaml @@ -1,8 +1,3 @@ ---- -apiVersion: networking.istio.io/v1beta1 -kind: VirtualService -metadata: - name: member-preferences-api -spec: - hosts: - - qa-member-preferences-api.apps.azure.lcu-internal.com +- op: add + path: /spec/hosts/- + value: qa-member-preferences-api.apps.azure.lcu-internal.com \ No newline at end of file diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/qa/set_configmap_deployment.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/qa/set_configmap_deployment.yaml new file mode 100644 index 0000000..2eeb4ae --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/qa/set_configmap_deployment.yaml @@ -0,0 +1,12 @@ +- op: add + path: /spec/template/spec/volumes/- + value: + name: volume-environment-appsettings + configMap: + name: member-preferences-api-environment-appsettings + +- op: add + path: /spec/template/spec/containers/0/volumeMounts/- + value: + name: volume-environment-appsettings + mountPath: /app/config/environment-appsettings diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/qa/xdi-batch/kustomization.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/qa/xdi-batch/kustomization.yaml new file mode 100644 index 0000000..77b95fb --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/qa/xdi-batch/kustomization.yaml @@ -0,0 +1,12 @@ +resources: + - ../../../base + +components: + - ../component + - ../../../components/keyvaults/normal + - ../../../components/workloads/xdi-batch + +patches: + - target: + kind: VirtualService + path: set_virtual_service.yaml diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/qa/xdi-batch/set_virtual_service.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/qa/xdi-batch/set_virtual_service.yaml new file mode 100644 index 0000000..209ed53 --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/qa/xdi-batch/set_virtual_service.yaml @@ -0,0 +1,3 @@ +- op: add + path: /spec/hosts/- + value: qa-member-preferences-xdi-batch-api.apps.azure.lcu-internal.com diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/uat/appsettings/appsettings.json b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/uat/appsettings/appsettings.json new file mode 100644 index 0000000..4be1b54 --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/uat/appsettings/appsettings.json @@ -0,0 +1,41 @@ +{ + "Primary": { + "AppName": "Member Preferences Api", + "SeqUrl": "https://uat-seq.lcu-internal.com", + "FeatureGates": { + "EnableControllers": true, + "BounceBackNotifications": false + } + }, + "ApiHealthCheckConfiguration": { + "VaultStatusConfiguration": { + "RunVaultStatusCheck": true, + "EnvironmentFromConfigmap": "UAT" + } + }, + "SqlConnectionConfiguration": { + "MaxRetryCount": 3, + "MaxRetryDelay": "00:00:30" + }, + "NotificationApiConfiguration": { + "Url": "https://uat-notifications-api.apps.azure.lcu-internal.com/api/", + "DNACoreErrorEmailList": [ "ITDevelopment@landmarkcu.onmicrosoft.com" ], + "TestEmailList": [ "ITDevelopment@landmarkcu.onmicrosoft.com" ], + "ShouldSendRealEmails": false + }, + "FileOperationsApiConfiguration": { + "Url": "https://uat-fileoperationsapi.lcu-internal.com/api/" + }, + "CoreApiWrapperConfiguration": { + "CoreApiBaseUrl": "https://uat-core-api-wrapper-api.apps.azure.lcu-internal.com/api/core/" + }, + "ScanBiCoreApiWrapperConfiguration": { + "ScanBiCoreApiWrapperUrl": "https://uat-scanbi-core-api-wrapper-api.apps.azure.lcu-internal.com/api/core/" + }, + "ConnectionConfiguration": { + "HostUrl": "uat-rabbitmq.lcu-internal.com" + }, + "ApiSecurityConfiguration": { + "ApiKeyAuthenticationFailureBehavior": "Error" + } +} diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/uat/common/kustomization.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/uat/common/kustomization.yaml deleted file mode 100644 index 2a7f26f..0000000 --- a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/uat/common/kustomization.yaml +++ /dev/null @@ -1,8 +0,0 @@ -resources: - - ../../../base -patchesStrategicMerge: - - set_appsettings_deployment.yaml - - set_secrets_provider_class.yaml -images: -- name: member-preferences-api - newName: landmarkcu/lcu.api.internal.memberpreferences-memberpreferences diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/uat/common/set_appsettings_deployment.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/uat/common/set_appsettings_deployment.yaml deleted file mode 100644 index b8280d1..0000000 --- a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/uat/common/set_appsettings_deployment.yaml +++ /dev/null @@ -1,12 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: member-preferences-api -spec: - template: - spec: - containers: - - name: member-preferences-api - env: - - name: ASPNETCORE_ENVIRONMENT - value: "Staging" diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/uat/common/set_secrets_provider_class.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/uat/common/set_secrets_provider_class.yaml deleted file mode 100644 index ac2ee3f..0000000 --- a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/uat/common/set_secrets_provider_class.yaml +++ /dev/null @@ -1,9 +0,0 @@ ---- -apiVersion: secrets-store.csi.x-k8s.io/v1 -kind: SecretProviderClass -metadata: - name: member-preferences-api-csi-key-vault-secrets-provider -spec: - parameters: - userAssignedIdentityID: 64ba01ed-1ecc-4c9b-b56e-8d618f2b81ce - keyvaultName: kv-lz-apps-uat-uscz diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/uat/component/kustomization.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/uat/component/kustomization.yaml new file mode 100644 index 0000000..75fab81 --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/uat/component/kustomization.yaml @@ -0,0 +1,10 @@ +apiVersion: kustomize.config.k8s.io/v1alpha1 +kind: Component + +patches: + - target: + kind: Deployment + path: set_appsettings_deployment.yaml + - target: + kind: SecretProviderClass + path: set_secrets_provider_class.yaml \ No newline at end of file diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/uat/component/set_appsettings_deployment.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/uat/component/set_appsettings_deployment.yaml new file mode 100644 index 0000000..4fd0533 --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/uat/component/set_appsettings_deployment.yaml @@ -0,0 +1,5 @@ +- op: add + path: /spec/template/spec/containers/0/env/- + value: + name: ASPNETCORE_ENVIRONMENT + value: "Staging" \ No newline at end of file diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/uat/component/set_secrets_provider_class.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/uat/component/set_secrets_provider_class.yaml new file mode 100644 index 0000000..efe4103 --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/uat/component/set_secrets_provider_class.yaml @@ -0,0 +1,7 @@ +- op: add + path: /spec/parameters/userAssignedIdentityID + value: 64ba01ed-1ecc-4c9b-b56e-8d618f2b81ce + +- op: add + path: /spec/parameters/keyvaultName + value: kv-lz-apps-uat-uscz diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/uat/dna-audit/kustomization.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/uat/dna-audit/kustomization.yaml new file mode 100644 index 0000000..0243aae --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/uat/dna-audit/kustomization.yaml @@ -0,0 +1,12 @@ +resources: + - ../../../base + +components: + - ../component + - ../../../components/keyvaults/normal + - ../../../components/workloads/dna-audit + +patches: + - target: + kind: VirtualService + path: set_virtual_service.yaml \ No newline at end of file diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/uat/dna-audit/set_virtual_service.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/uat/dna-audit/set_virtual_service.yaml new file mode 100644 index 0000000..1e8fe4f --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/uat/dna-audit/set_virtual_service.yaml @@ -0,0 +1,3 @@ +- op: add + path: /spec/hosts/- + value: uat-member-preferences-dna-audit-api.apps.azure.lcu-internal.com \ No newline at end of file diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/uat/kustomization.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/uat/kustomization.yaml index 25a65b6..135ec75 100644 --- a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/uat/kustomization.yaml +++ b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/uat/kustomization.yaml @@ -1,2 +1,16 @@ resources: - normal + - dna-audit + - xdi-batch + +configMapGenerator: + - name: member-preferences-api-environment-appsettings + files: + - appsettings/appsettings.json +generatorOptions: + disableNameSuffixHash: true + +patches: + - target: + kind: Deployment + path: set_configmap_deployment.yaml diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/uat/normal/configmap.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/uat/normal/configmap.yaml deleted file mode 100644 index 8af3097..0000000 --- a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/uat/normal/configmap.yaml +++ /dev/null @@ -1,63 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: memberpreferencesapi-configmap -data: - primary.json: | - { - "Primary": { - "AppName": "Member Preferences Api", - "SeqUrl": "https://uat-seq.lcu-internal.com", - "XdiBatchProcessCronSchedule": "1 5-18 * * *", - "DnaDataAuditProcessCronSchedule": "*/5 3-19 * * *", - "FeatureFlags": { - "RunHostedServices": true, - "RunXdiBatchProcessConsumer": true, - "RunXdiSshResponseConsumer": true, - "RunAccountDnaFieldChangeConsumer": true, - "RunAgreementDnaFieldChangeConsumer": true, - "RunOrganizationDnaFieldChangeConsumer": true - }, - "FeatureGates": { - "EnableControllers": true, - "BounceBackNotifications": true - } - }, - "ApiHealthCheckConfiguration": { - "VaultStatusConfiguration": { - "RunVaultStatusCheck": true, - "EnvironmentFromConfigmap": "UAT" - } - }, - "SqlConnectionConfiguration": { - "MaxRetryCount": 3, - "MaxRetryDelay": "00:00:30" - }, - "NotificationApiConfiguration": { - "Url": "https://uat-notificationsapi.lcu-internal.com/api/", - "DNACoreErrorEmailList": [ "ITDevelopment@landmarkcu.onmicrosoft.com" ], - "TestEmailList": [ "ITDevelopment@landmarkcu.onmicrosoft.com" ], - "ShouldSendRealEmails": false - }, - "FtpApiConfiguration": { - "Url": "https://uat-ftpapi.lcu-internal.com/" - }, - "XdiSftpApiConfiguration": { - "HostName": "10.147.44.23", - "PortNumber": 22, - "SftpRootBasePath": "/home/devops/" - }, - "CoreApiWrapperConfiguration": { - "CoreApiBaseUrl": "https://uat-core-api-wrapper-api.apps.azure.lcu-internal.com/api/core/" - }, - "ConnectionConfiguration": { - "HostUrl": "uat-rabbitmq.lcu-internal.com" - }, - "DnaAuditProcessConfiguration": { - "LookBackMinutes": -5, - "NumberOfAllowedConsecutiveFailures": 12 - }, - "ApiSecurityConfiguration": { - "ApiKeyAuthenticationFailureBehavior": "Error" - } - } diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/uat/normal/kustomization.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/uat/normal/kustomization.yaml index 6dd0c3b..b99cbe1 100644 --- a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/uat/normal/kustomization.yaml +++ b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/uat/normal/kustomization.yaml @@ -1,5 +1,12 @@ resources: - - configmap.yaml - - ../common -patchesStrategicMerge: - - set_virtual_service.yaml + - ../../../base + +components: + - ../component + - ../../../components/keyvaults/normal + - ../../../components/workloads/normal + +patches: + - target: + kind: VirtualService + path: set_virtual_service.yaml \ No newline at end of file diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/uat/normal/set_virtual_service.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/uat/normal/set_virtual_service.yaml index 3750f3c..3b385eb 100644 --- a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/uat/normal/set_virtual_service.yaml +++ b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/uat/normal/set_virtual_service.yaml @@ -1,8 +1,3 @@ ---- -apiVersion: networking.istio.io/v1beta1 -kind: VirtualService -metadata: - name: member-preferences-api -spec: - hosts: - - uat-member-preferences-api.apps.azure.lcu-internal.com +- op: add + path: /spec/hosts/- + value: uat-member-preferences-api.apps.azure.lcu-internal.com \ No newline at end of file diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/uat/set_configmap_deployment.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/uat/set_configmap_deployment.yaml new file mode 100644 index 0000000..2eeb4ae --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/uat/set_configmap_deployment.yaml @@ -0,0 +1,12 @@ +- op: add + path: /spec/template/spec/volumes/- + value: + name: volume-environment-appsettings + configMap: + name: member-preferences-api-environment-appsettings + +- op: add + path: /spec/template/spec/containers/0/volumeMounts/- + value: + name: volume-environment-appsettings + mountPath: /app/config/environment-appsettings diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/uat/xdi-batch/kustomization.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/uat/xdi-batch/kustomization.yaml new file mode 100644 index 0000000..77b95fb --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/uat/xdi-batch/kustomization.yaml @@ -0,0 +1,12 @@ +resources: + - ../../../base + +components: + - ../component + - ../../../components/keyvaults/normal + - ../../../components/workloads/xdi-batch + +patches: + - target: + kind: VirtualService + path: set_virtual_service.yaml diff --git a/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/uat/xdi-batch/set_virtual_service.yaml b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/uat/xdi-batch/set_virtual_service.yaml new file mode 100644 index 0000000..b6c846e --- /dev/null +++ b/LCU.API.Internal.MemberPreferencesApi/kustomize/overlays/uat/xdi-batch/set_virtual_service.yaml @@ -0,0 +1,3 @@ +- op: add + path: /spec/hosts/- + value: uat-member-preferences-xdi-batch-api.apps.azure.lcu-internal.com