public async Task <AddResult <NpvVariable> > AddNpvVariable(NpvVariable data) { var addResult = new AddResult <NpvVariable>(); try { var entry = new NpvVariableEntity { InitialValue = data.InitialValue, LowerBoundRate = data.LowerBoundRate, UpperBoundRate = data.UpperBoundRate, Increment = data.Increment, CashflowEntities = new List <NpvVariableCashflowEntity>() }; var order = 1; data.Cashflows?.ForEach(x => { entry.CashflowEntities.Add(new NpvVariableCashflowEntity { Cashflow = x.Cashflow, Order = order++ }); }); _appDbContext.NpvVariables.Add(entry); var saveResult = await _appDbContext.SaveChangesAsync(); if (saveResult == 0) { addResult.Errors.Add(new Error(ErrorCodes.NpvVariableServiceError001)); } else { addResult.Result = await _appDbContext.NpvVariables.GetNpvVariableById(entry.Id); } } catch (Exception ex) { // do logging here addResult.Errors.Add(new Error(ErrorCodes.NpvVariableServiceError002)); } return(addResult); }
public async Task <IActionResult> CalculateAsync([FromQuery] NpvCalculateModel npvCalculateModel) { var computeResult = _npvService.ComputeNPVs( npvCalculateModel.InitialValue, npvCalculateModel.LowerBoundRate, npvCalculateModel.UpperBoundRate, npvCalculateModel.Increment, npvCalculateModel.Cashflows ); if (!computeResult.HasErrors) { var npvVariable = new NpvVariable { InitialValue = npvCalculateModel.InitialValue, LowerBoundRate = npvCalculateModel.LowerBoundRate, UpperBoundRate = npvCalculateModel.UpperBoundRate, Increment = npvCalculateModel.Increment, Cashflows = new List <NpvVariableCashflow>() }; for (int ctr = 0; ctr < npvCalculateModel.Cashflows.Count; ctr++) { npvVariable.Cashflows.Add(new NpvVariableCashflow { Cashflow = npvCalculateModel.Cashflows[ctr], Order = ctr }); } var addResult = await _npvVariableService.AddNpvVariable(npvVariable); if (addResult.HasErrors) { computeResult.Errors.AddRange(addResult.Errors); } } if (computeResult.HasErrors) { return(BadRequest(computeResult)); } return(Ok(computeResult)); }