90 lines
3.2 KiB
C#
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);
|
|
}
|
|
}
|
|
} |