public async Task <WorkflowResult> AddPaymentAsync(decimal amount, Guid userId) { using (TransactionScope transactionScope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled)) { try { WorkflowResult workflowResult = await _decorated.AddPaymentAsync(amount, userId); if (workflowResult.Success) { transactionScope.Complete(); } else { Transaction.Current.Rollback(); } return(workflowResult); } catch (Exception ex) { Transaction.Current.Rollback(); int errorId = await _applicationLog.LogExceptionAsync(ex); return(new WorkflowResult( new[] { Resources.Resource.InternalServerErrorMessage, string.Format(Resources.Resource.GeneratedErrorIdMessage, errorId) })); } } }
public async Task <ActionResult> OnPostAsync([FromServices] OrderFactory orderFactory) { if (orderFactory == null) { throw new ArgumentNullException(nameof(orderFactory)); } ModelState.Clear(); if (!TryValidateModel(AddPaymentRequest)) { ModelState.TryAddModelError("", "Parametros incorrectos"); return(await TryLoadViewModelAsync()); } EnaBricks.Generics.Option <IOrder> orderOption = await orderFactory.OrderAsync(Id); if (!orderOption.Any()) { return(Redirect("/Error")); } IOrder order = orderOption.Single(); WorkflowResult result = await order.AddPaymentAsync(AddPaymentRequest.Amount, UserId()); if (!result.Success) { for (int i = 0; i < result.Errors.Length; i++) { ModelState.TryAddModelError("", result.Errors[i]); } } return(await TryLoadViewModelAsync()); }