Example #1
0
        public async Task <Entities.Cart> CartCheckout(string cartId, CartCheckoutRequest payload, string controlId)
        {
            var databaseCart = await GetCartById(cartId);

            if (databaseCart == null)
            {
                throw new CartNotFoundException($"Cart {cartId} not found");
            }

            if (databaseCart.Status != STATUS_PENDING)
            {
                throw new InvalidCartException($"Cart {databaseCart.Id} has status {databaseCart.Status}");
            }

            databaseCart.ControlId    = controlId;
            databaseCart.CurrencyCode = payload.CurrencyCode;

            var cartQueueMessage = _mapper.Map <StartCheckoutQueueMessage>(databaseCart);

            await _amazonSQSClient.SendMessageAsync(new SendMessageRequest()
            {
                QueueUrl    = _configuration["AmazonSQSCheckoutQueueURL"],
                MessageBody = JsonConvert.SerializeObject(cartQueueMessage)
            });

            databaseCart.Status = STATUS_DONE;

            await _cartsCollection.ReplaceOneAsync(cart => cart.Id == cartId, databaseCart);

            return(databaseCart);
        }
        public async Task <IActionResult> CartCheckout([FromRoute] string cartId, [FromBody] CartCheckoutRequest payload, [FromHeader(Name = "x-team-control")] string controlId)
        {
            _logger.LogInformation("CartCheckout: {cartId} {@payload} {controlId}", cartId, payload, controlId);

            var cart = await _cartRepository.CartCheckout(cartId, payload, controlId);

            var response = _mapper.Map <CartResponse>(cart);

            _logger.LogInformation("CartCheckout: {@response}", response);

            return(Ok(response));
        }