private OrderMailerModel GetObject(Domain.PreAuthorization preAuthorization) { return(new OrderMailerModel { FirstName = preAuthorization.Order.User.FirstName, LastName = preAuthorization.Order.User.LastName, TotalPrice = preAuthorization.Order.TotalPrice, CreatedOn = preAuthorization.Order.CreatedOn, ProductsCount = preAuthorization.Order.ProductsCount, MyOrdersUrl = $"{_configuration.GetValue<string>("Portal:url")}/#/my-orders/" }); }
public async Task <Result <Guid> > Handle(CreatePreAuthorizationForOrderCommand request, CancellationToken token) { var validationResult = await _orderService.ValidateConsumerOrderAsync(request.OrderId, request.RequestUser, token); if (!validationResult.Succeeded) { return(Failure <Guid>(validationResult)); } var checkResult = await _mediatr.Process(new CheckConsumerConfigurationCommand(request.RequestUser), token); if (!checkResult.Succeeded) { return(Failure <Guid>(checkResult)); } var order = await _context.Orders.SingleAsync(e => e.Id == request.OrderId, token); using (var transaction = await _context.BeginTransactionAsync(token)) { var card = await _context.Cards.SingleOrDefaultAsync(c => c.Identifier == request.CardIdentifier, token); if (card == null) { card = new Domain.Card(Guid.NewGuid(), request.CardIdentifier, $"Carte_{DateTime.UtcNow.ToString("YYYYMMDDTHHmmss")}", order.User); await _context.AddAsync(card, token); await _context.SaveChangesAsync(token); } var preAuthorization = new Domain.PreAuthorization(Guid.NewGuid(), order, card, _pspOptions.PreAuthorizeUrl); await _context.AddAsync(preAuthorization, token); await _context.SaveChangesAsync(token); var result = await _pspService.CreatePreAuthorizationAsync(preAuthorization, request.IpAddress, request.BrowserInfo, token); if (!result.Succeeded) { return(Failure <Guid>(result)); } preAuthorization.SetIdentifier(result.Data.Identifier); preAuthorization.SetStatus(result.Data.Status); preAuthorization.SetPaymentStatus(result.Data.PaymentStatus); preAuthorization.SetExpirationDate(result.Data.ExpirationDate); preAuthorization.SetRemaining(result.Data.Remaining); preAuthorization.SetDebited(result.Data.Debited); preAuthorization.SetResult(result.Data.ResultCode, result.Data.ResultMessage); preAuthorization.SetSecureModeRedirectUrl(result.Data.SecureModeRedirectUrl); preAuthorization.SetSecureModeNeeded(result.Data.SecureModeNeeded); order.SetStatus(OrderStatus.Validated); await _context.SaveChangesAsync(token); await transaction.CommitAsync(token); return(Success(preAuthorization.Id)); } }