示例#1
0
        public async Task <IActionResult> AdicionarPedido(AdicionarPedidoViewModel pedidoViewModel)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState.Values.Select(x => x.Errors)));
            }

            var username = User.Identities.FirstOrDefault().Name;
            var user     = await _userService.GetByUserName(username);

            var cliente = user.Cliente;

            if (user.Cliente == null)
            {
                return(BadRequest("Usuário não é um Cliente"));
            }

            var pedido = new Pedido(peso: pedidoViewModel.Peso, DateTime.Now, EnumStatusPedido.AguardandoPagamento, pedidoViewModel.Valor);

            pedido.InformarCliente(cliente);

            var motivoRejeicaoPedido = _pedidoService.IsPedidoValido(pedido);

            if (!String.IsNullOrEmpty(_pedidoService.IsPedidoValido(pedido)))
            {
                return(BadRequest($"Pedido rejeitado: {motivoRejeicaoPedido}"));
            }

            bool pedidoInserido = await _pedidoService.Insert(pedido);

            if (!pedidoInserido)
            {
                return(BadRequest());
            }

            using (HttpClient client = new HttpClient())
            {
                var body = new AdicionarPagamentoCartaoViewModel()
                {
                    PedidoId            = pedido.Id,
                    Valor               = pedidoViewModel.Valor,
                    NumeroCartao        = pedidoViewModel.NumeroCartao,
                    BandeiraCartao      = pedidoViewModel.Bandeira,
                    MesVencimentoCartao = pedidoViewModel.MesVencimento,
                    AnoVencimentoCartao = pedidoViewModel.AnoVencimento
                };

                var response = await client.PostAsync("https://localhost/api/pagamento", new StringContent(JsonConvert.SerializeObject(body), Encoding.UTF8, "application/json"));

                if (!response.IsSuccessStatusCode)
                {
                    return(BadRequest());
                }
            }

            return(Ok(pedido));
        }
        public async Task <IActionResult> PagamentoCartaoPost(AdicionarPagamentoCartaoViewModel viewModel)
        {
            // TODO: Verificar como retornar motivo da rejeição do pagamento a partir do service pra não precisar validar aqui, apenas no service.
            var enviado = await _bus.EnviarComando(_mapper.Map <AdicionarPagamentoCartaoCommand>(viewModel));

            if (!enviado)
            {
                return(BadRequest());
            }

            return(Ok());
        }