public IActionResult Post(List <PedidoItem> pedidosItens) { try { //Adiciona um novo pedido com os itens do pedido Pedido pedido = _pedidoRepository.Adicionar(pedidosItens); //Caso ok retorna o pedido return(Ok(pedido)); } catch (Exception ex) { return(BadRequest(ex.Message)); } }
private async Task <Pedido> ObterPedido() { var pedidoId = ObterPedidoId(); if (pedidoId == Guid.Empty) { var novoPedido = new Pedido(); await _pedidoRepository.Adicionar(novoPedido); InserirSessionPedidoId(novoPedido.Id); return(novoPedido); } var pedido = await _pedidoRepository.ObterDadosPedido(pedidoId); return(pedido); }
public async Task <bool> Handle(AdicionarItemPedidoCommand message, CancellationToken cancellationToken) { if (!ValidarComando(message)) { return(false); } var pedido = await _pedidoRepository.ObterPedidoRascunhoPorClienteId(message.ClienteId); var pedidoItem = new PedidoItem( message.ProdutoId, message.Nome, message.Quantidade, message.ValorUnitario ); if (pedido == null) { pedido = Pedido.PedidoFactory.NovoPedidoRascunho(message.ClienteId); pedido.AdicionarItem(pedidoItem); _pedidoRepository.Adicionar(pedido); pedido.AdicionarEvento(new PedidoRascunhoIniciadoEvent(message.ClienteId, message.ProdutoId)); } else { var pedidoItemExistente = pedido.PedidoItemExistente(pedidoItem); pedido.AdicionarItem(pedidoItem); if (pedidoItemExistente) { _pedidoRepository.AtualizarItem(pedido.PedidoItems.FirstOrDefault(p => p.ProdutoId == pedidoItem.ProdutoId)); } else { _pedidoRepository.AdicionarItem(pedidoItem); } pedido.AdicionarEvento(new PedidoAtualizadoEvent(pedido.ClienteId, pedido.Id, pedido.ValorTotal)); } pedido.AdicionarEvento(new PedidoItemAdicionadoEvent(pedido.ClienteId, pedido.Id, message.ProdutoId, message.Nome, message.ValorUnitario, message.Quantidade)); return(await _pedidoRepository.UnitOfWork.Commit()); }
public async Task <bool> Handle(AdicionarPedidoCommand message, CancellationToken cancellationToken) { if (!ValidarComando(message)) { return(false); } var cliente = await _clienteRepository.ObterPorId(message.ClienteId); var drone = _droneRepository.ObterTodos().Result.OrderByDescending(d => d.Autonomia).FirstOrDefault(d => d.Capacidade >= message.Peso); if (drone == null) { await _mediatr.PublicarNotificacao(new DomainNotification(message.MessageType, "Pedido acima do peso máximo aceito.")); return(false); } double distancia = _localizacaoLoja.CalcularDistanciaEmKilometros(new Localizacao(cliente.Latitude, cliente.Longitude)); distancia *= 2; int tempoTrajetoCompleto = distancia.CalcularTempoTrajetoEmMinutos(drone.Velocidade); if (tempoTrajetoCompleto > drone.Autonomia) { await _mediatr.PublicarNotificacao(new DomainNotification(message.MessageType, "Fora da área de entrega.")); return(false); } var pedido = new Pedido(message.Peso, message.DataHora, message.Status, message.Valor); pedido.InformarCliente(cliente); pedido.AdicionarEvento(new PedidoAdicionadoEvent(pedido.Valor, message.BandeiraCartao, message.NumeroCartao, message.MesVencimentoCartao, message.AnoVencimentoCartao) { AggregateRoot = pedido.Id }); await _pedidoRepository.Adicionar(pedido); return(await _pedidoRepository.UnitOfWork.Commit()); }
public async Task <bool> Handle(AdicionarItemPedidoCommand request, CancellationToken cancellationToken) { if (!ValidarComando(request)) { return(false); } var pedido = await _pedidoRepository.ObterPedidoRascunhoPorClienteId(request.ClienteId); var pedidoItem = new PedidoItem(produtoId: request.ProdutoId, quantidade: request.Quantidade, valorUnitario: request.ValorUnitario, produtoNome: request.Nome); if (pedido == null) { pedido = Pedido.PedidoFactory.NovoPedidoRascunho(request.ClienteId); pedido.AdicionarItem(pedidoItem); _pedidoRepository.Adicionar(pedido); } else { var pedidoItemExistente = pedido.PedidoItemExistente(pedidoItem); pedido.AdicionarItem(pedidoItem); if (pedidoItemExistente) { _pedidoRepository.AtualizarItem(pedido.PedidoItems.FirstOrDefault(p => p.ProdutoId == pedidoItem.ProdutoId)); } else { _pedidoRepository.AdicionarItem(pedidoItem); } _pedidoRepository.Atualizar(pedido); } pedido.AdicionarEvento(new PedidoItemAdicionadoEvent(clienteId: request.ClienteId, produtoId: request.ProdutoId, quantidade: request.Quantidade, valorUnitario: request.ValorUnitario, produtoNome: request.Nome, pedidoId: pedido.Id)); return(await _pedidoRepository.UnitOfWork.Commit()); }
public async Task <ValidationResult> Handle(AdicionarPedidoCommand message, CancellationToken cancellationToken) { // Validação do comando if (!message.EhValido()) { return(message.ValidationResult); } // Mapear Pedido var pedido = MapearPedido(message); // Aplicar voucher se houver if (!await AplicarVoucher(message, pedido)) { return(ValidationResult); } // Validar pedido if (!ValidarPedido(pedido)) { return(ValidationResult); } // Processar pagamento if (!ProcessarPagamento(pedido)) { return(ValidationResult); } // Se pagamento tudo ok! pedido.AutorizarPedido(); // Adicionar Evento pedido.AdicionarEvento(new PedidoRealizadoEvent(pedido.Id, pedido.ClientId)); // Adicionar Pedido Repositorio _pedidoRepository.Adicionar(pedido); // Persistir dados de pedido e voucher return(await PersistirDados(_pedidoRepository.UnitOfWork)); }
public async Task <ValidationResult> Handle(AdicionarPedidoCommand message, CancellationToken cancellationToken) { // validar comando if (!message.EhValido()) { return(message.ValidationResult); } //mapear pedido var pedido = MapearPedido(message); // aplicar voucher if (!await AplicarVoucher(message, pedido)) { return(ValidationResult); } // validar pedido if (!ValidarPedido(pedido)) { return(ValidationResult); } // processar pagamento if (!await ProcessarPagamento(pedido, message)) { return(ValidationResult); } // se pagamento ok pedido.AutorizarPedido(); // adicionar evento pedido.AdicionarEvento(new PedidoRealizadoEvent(pedido.Id, pedido.ClienteId)); // adicionar pedido repositorio _pedidoRepository.Adicionar(pedido); // persistir dados do pedido e voucher return(await PersistirDados(_pedidoRepository.UnitOfWork)); }
public async Task <bool> Handle(AdicionarPedidoCommand message, CancellationToken cancellationToken) { if (!ValidarComando(message)) { return(false); } var user = await _userRepository.ObterPorNome(_usuarioAutenticado.GetCurrentUserName()); if (user.Cliente == null) { return(false); } var pedido = new Pedido(message.Peso, message.DataHora, message.Status, message.Valor); pedido.InformarCliente(user.Cliente); await _repositoryPedido.Adicionar(pedido); return(await _repositoryPedido.UnitOfWork.Commit()); }
public async Task <string> Get() { var carga = new List <Pedido>(); for (int i = 0; i < 40; i++) { if (i % 2 == 0) { carga.Add(new Pedido { DataCadastro = DateTime.Now, DataEntrega = DateTime.Now.AddDays(1), Endereco = new PedidoEndereco() { CEP = "27343-360", Bairro = "Jardim America", Cidade = "Barra Mansa", Estado = "Rio de Janeiro", Complemento = "Casa 01", Logradouro = "Rua Franscisco Ribeiro", Numero = "132" }, EquipeEntrega = new PedidoEquipeEntrega() { Nome = "Transportadora xpto", Descricao = "Transportadora lorem ipsum", PlacaVeiculo = "LKJ-2132" }, PedidoItems = new List <PedidoItem>() { new PedidoItem() { Nome = "Playstation 5", Descricao = "Console para jogos.", Valor = 5400 }, new PedidoItem() { Nome = "Xbox One", Descricao = "Console para jogos.", Valor = 3400 } }, }); } else { carga.Add(new Pedido { DataCadastro = DateTime.Now, DataEntrega = DateTime.Now.AddDays(1), Endereco = new PedidoEndereco() { CEP = "22131-360", Bairro = "Voldac", Cidade = "Volta Redonda", Estado = "Rio de Janeiro", Complemento = "Casa 01", Logradouro = "Rua E", Numero = "212" }, EquipeEntrega = new PedidoEquipeEntrega() { Nome = "Transportadora yz", Descricao = "Transportadora lorem ipsum", PlacaVeiculo = "KMK-3121" }, PedidoItems = new List <PedidoItem>() { new PedidoItem() { Nome = "Piscina 2000L", Descricao = "Piscina para criancas ate 6 anos.", Valor = 300 }, new PedidoItem() { Nome = "Pula pula", Descricao = "Cama elastica para criancas ate 12 anos.", Valor = 4700 } }, }); } } foreach (var item in carga) { await _pedidoRepository.Adicionar(item); } return("Carga Fake Realizada"); }