using LCU.Library.Internal.IncentiveApiModels.Requests; using LCU.Library.Internal.IncentiveApiModels.Results; using LCU.Library.Internal.LCUServiceFactory.Services; using LCU.API.Internal.Operations.IncentiveApi.Services.NightlyIncentiveProcesses; using LCU.Library.Internal.ApiResponse.Services; namespace LCU.API.Internal.Operations.IncentiveApi.Services.NightlyDecisionServices; public class NightlyActivityDecisionService : INightlyActivityDecisionService { private ProcessResult _processResult; private INightlyIncentiveProcessesService _nightlyIncentiveProcessesService; private readonly ILcuServiceFactory _lcuServiceFactory; public NightlyActivityDecisionService(ILcuServiceFactory lcuServiceFactory) { _nightlyIncentiveProcessesService = null; _lcuServiceFactory = lcuServiceFactory; _processResult = new ProcessResult(); } public async Task HandleProcessRequest(NightlyIncentiveProcessRequest request) { try { ArgumentNullException.ThrowIfNull(request); _nightlyIncentiveProcessesService = _lcuServiceFactory.GetService(request.NightlyIncentiveProcessType); ArgumentNullException.ThrowIfNull(_nightlyIncentiveProcessesService); var message = $"Queued Request for {request.NightlyIncentiveProcessType}"; Log.Information(message); _processResult = await _nightlyIncentiveProcessesService.RunProductDecisionProcess(request); await QueueReturnResponse.QueueResponse(request, _processResult.Success, _processResult.MessageStack); } catch (Exception exception) { var message = $"There was an issue with handling the Daily Decision Process Exception Message: {exception.Message}."; _processResult.MessageStack.Add(message); _processResult.Success = false; await QueueReturnResponse.QueueResponse(request, _processResult.Success, _processResult.MessageStack); } } }