Files
monorepo/LCU.API.Internal.LoanRate/LCU.API.Internal.LoanRate/Services/ComplexEvaluationDetailService.cs
T
2026-04-07 14:21:04 -05:00

90 lines
3.2 KiB
C#

using LCU.Library.Internal.LcuEvaluation.Services;
using LCU.Library.Internal.LcuEvaluationModels.Entities;
using LCU.Library.Internal.LcuEvaluationModels.Requests;
using Newtonsoft.Json;
namespace LCU.API.Internal.LoanRate.Services;
public class ComplexEvaluationDetailService : IComplexEvaluationDetailService
{
private readonly IRateEvaluationService _rateEvaluationService;
private readonly IEvaluationDetailService _evaluationDetailService;
public ComplexEvaluationDetailService(IRateEvaluationService rateEvaluationService,
IEvaluationDetailService evaluationDetailService)
{
_rateEvaluationService = rateEvaluationService;
_evaluationDetailService = evaluationDetailService;
}
public async Task<EvaluationDetail> UpdateComplexAsync(EvaluationDetail evaluationDetail)
{
try
{
return await _evaluationDetailService.UpdateComplexAsync(evaluationDetail);
}
catch (Exception exception)
{
var message = $"Failure completing complex update for EvaluationDetail. EvaluationDetailId: {evaluationDetail.EvaluationDetailId}";
Log.Error(exception, message);
throw new ServiceException(message);
}
}
public async Task<EvaluationDetail> SaveComplexAsync(EvaluationDetailRequest request)
{
try
{
var newEvaluationDetail = await _evaluationDetailService.SaveComplexAsync(request);
var previousVersionId = request.PreviousVersionEvaluationDetailId ?? 0;
if (previousVersionId <= 0)
{
return newEvaluationDetail;
}
var rateEvaluations =
(await _rateEvaluationService.GetRangeByEvaluationDetailIdAsync(previousVersionId)).ToList();
if (rateEvaluations is null || !rateEvaluations.Any())
{
return newEvaluationDetail;
}
var newRateEvaluations = rateEvaluations.Select(rateEvaluation =>
new RateEvaluation
{
RateId = rateEvaluation.RateId,
EvaluationDetailId = newEvaluationDetail.EvaluationDetailId
}).ToList();
await _rateEvaluationService.SaveRangeAsync(newRateEvaluations);
return newEvaluationDetail;
}
catch (Exception exception)
{
var message = "Failure on SaveComplexAsync. " +
$"EvaluationDetailRequest: ({JsonConvert.SerializeObject(request)})";
Log.Error(exception, message);
throw new ServiceException(message);
}
}
public async Task DeleteComplexAsync(int evaluationDetailId)
{
try
{
await _rateEvaluationService.DeleteRangeByEvaluationDetailIdAsync(evaluationDetailId);
await _evaluationDetailService.DeleteComplexAsync(evaluationDetailId);
}
catch (Exception exception)
{
var message = "Failure on DeleteComplexAsync. " +
$"EvaluationDetailId: ({evaluationDetailId})";
Log.Error(exception, message);
throw new ServiceException(message);
}
}
}