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)); }