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/"
     });
 }
Exemple #2
0
        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));
            }
        }