Files
monorepo/LCU.API.Operations.IncentiveAPI/LCU.API.Internal.Operations.IncentiveApi/Services/DnaActivityServices/NewDigitalCheckingAccountActivityService.cs
T
2026-03-17 09:53:09 -05:00

94 lines
5.4 KiB
C#

using LCU.API.Internal.Operations.IncentiveApi.Exceptions;
using LCU.Library.Internal.IncentiveApiModels.Enums;
using LCU.API.Internal.Operations.IncentiveApi.Models.ExternalActivities;
using LCU.API.Internal.Operations.IncentiveApi.Services.MicroApiServices;
using LCU.Api.Internal.MaidBotLib.Models;
using LCU.Library.Internal.Exceptions;
using LCU.Library.Internal.IncentiveApiModels.Requests;
using LCU.Library.Internal.IncentiveApiModels.Results;
using LCU.API.Internal.Operations.IncentiveApi.Services.IncentiveProcesses;
using LCU.Library.Internal.LCUServiceFactory.Configurations;
using Microsoft.Extensions.DependencyInjection;
namespace LCU.API.Internal.Operations.IncentiveApi.Services.DnaActivityServices;
public class NewDigitalCheckingAccountActivityService : IncentiveProcessesService, IIncentiveProcessesService
{
private readonly ICoreApiWrapperService _coreApiWrapperService;
private readonly IServiceScopeFactory _serviceScopeFactory;
private readonly ProcessResult _incentiveProcessResult;
public NewDigitalCheckingAccountActivityService(ServicesFactoryConfiguration servicesFactoryConfiguration,
ICoreApiWrapperService coreApiWrapperService, IServiceScopeFactory serviceScopeFactory)
: base(servicesFactoryConfiguration)
{
_coreApiWrapperService = coreApiWrapperService;
_serviceScopeFactory = serviceScopeFactory;
_incentiveProcessResult = new ProcessResult();
}
public async Task<ProcessResult> SyncLatestActivitiesFromDna(IncentiveProcessRequest request)
{
try
{
var externalActivities = await ProcessLatestActivity();
var message = $"Added {externalActivities.Count()} Digital Checking Accounts from DNA";
Log.Information(message);
_incentiveProcessResult.MessageStack.Add(message);
}
catch (Exception exception)
{
var message = $"There was an issue with Digital Checking Accounts from DNA process. Exception Message: {exception.Message}.";
_incentiveProcessResult.MessageStack.Add(message);
_incentiveProcessResult.Success = false;
}
return _incentiveProcessResult;
}
public async Task<List<IExternalActivity>> ProcessLatestActivity()
{
try
{
using var scope = _serviceScopeFactory.CreateScope();
var lastUpdate = await Task.Run(async () => await scope.ServiceProvider.GetRequiredService<IDnaActivityProcessingService>().GetLastActivityProcessedData(Process.ImportCheckingAccountSalesFromDigitalBanking) ?? throw new MissingProcessorRunHistoryException(Process.ImportCheckingAccountSalesFromDigitalBanking));
var allActivities = (await _coreApiWrapperService.GetNewCheckingDigitalBankingAccountSalesActivity(lastUpdate.LastProcessedRecordTimestamp)).ToList();
var filteredActivities = await Task.Run(async () => await scope.ServiceProvider.GetRequiredService<IDnaActivityProcessingService>().GetFilteredExternalActivities(allActivities.Cast<IExternalActivity>().ToList()));
var mappedActivities = await Task.Run(async () => await scope.ServiceProvider.GetRequiredService<IDnaActivityProcessingService>().HandleMapExternalActivities(filteredActivities.ToList(), Product.NewChecking, ActivityType.Sale));
if (mappedActivities.Count > 0)
{
foreach (var activity in mappedActivities)
{
await Task.Run(async () => await scope.ServiceProvider.GetRequiredService<IDnaActivityProcessingService>().HandleIncomingActivityDecision(activity, Product.NewChecking, ActivityType.Sale));
}
}
if (allActivities.Count < 1)
{
await Task.Run(async () => await scope.ServiceProvider.GetRequiredService<IDnaActivityProcessingService>().UpdateProcessorHistory(Process.ImportCheckingAccountSalesFromDigitalBanking, lastUpdate.LastProcessedRecordId, lastUpdate.LastProcessedRecordTimestamp));
return filteredActivities;
}
var latestActivity = allActivities.Where(activity => activity.ActivityDateTime == allActivities.Select(ca => ca.ActivityDateTime).Max()).OrderByDescending(x => x.ActivityNbr).First();
await Task.Run(async () => await scope.ServiceProvider.GetRequiredService<IDnaActivityProcessingService>().UpdateProcessorHistory(Process.ImportCheckingAccountSalesFromDigitalBanking, latestActivity.ActivityNbr, latestActivity.ActivityDateTime));
return filteredActivities;
}
catch (ServiceException serviceException)
{
Log.ForContext(Enum.GetName(typeof(PropertyEnum), PropertyEnum.Group), Enum.GetName(typeof(GroupEnum), GroupEnum.ITDevelopment))
.Error(serviceException, $"Import Digital Checking Accounts Failure. " +
$"Failed to Process Latest Digital Checking Accounts. Will try again from same starting position on next run.");
throw;
}
catch (Exception exception)
{
Log.ForContext(Enum.GetName(typeof(PropertyEnum), PropertyEnum.Group), Enum.GetName(typeof(GroupEnum), GroupEnum.ITDevelopment))
.Fatal(exception, $"Import Digital Checking Accounts Failure. " +
$"Failed to Process Latest Digital Checking Accounts. Will try again from same starting position on next run.");
throw;
}
}
}