/// <summary>
        /// Executa o tratamento do comando
        /// </summary>
        /// <param name="message">Comando de Compra</param>
        public async Task <Response> Handle(PurchaseCommand message)
        {
            try
            {
                var wallet = await _walletRepository.GetWalletByUser(_authenticatedUser.UserId);

                wallet.Buy(message.Amount);

                foreach (var creditCard in wallet.CreditCards)
                {
                    await _creditCardRepository.ChangeCardLimits(creditCard);
                }

                return(new Response($"Compra realizada com sucesso no valor de {message.Amount:C}"));
            }
            catch (Exception ex)
            {
                return(new Response().AddError(ex.Message));
            }
        }
Beispiel #2
0
        /// <summary>
        /// Executa o tratamento do comando
        /// </summary>
        /// <param name="message">Comando de Pagamento de Cartão de Crédito</param>
        public async Task <Response> Handle(PayCreditCardCommand message)
        {
            try
            {
                var creditCard = await _creditCardRepository.Get(message.CardId);

                creditCard.ReleaseCredit(message.Amount);

                await _creditCardRepository.ChangeCardLimits(creditCard);

                var response = new
                {
                    amountPaid = message.Amount,
                    creditCard.AvailableCredit,
                    creditCard.PendingPayment
                };

                return(new Response(response));
            }
            catch (Exception ex)
            {
                return(new Response().AddError(ex.Message));
            }
        }