public async Task <IActionResult> AdicionarNovoRegistro(
            [FromBody] RegistrarPassagemPeloTerminal.Command command,
            [FromServices] RegistrarPassagemPeloTerminal.CommandHandler handler)
        {
            await handler.Handle(command);

            return(Ok());
        }
Esempio n. 2
0
            public async Task <Resolved> Handle(Command command)
            {
                using (var session = _database.Instance.Client.StartSession())
                {
                    try
                    {
                        var motoristaCollection = _database.GetCollection <Motorista>();

                        if (_database.GetCollectionAsQueryable <Motorista>().Any(m => m.Cpf == command.Cpf))
                        {
                            return(Resolved.ErrAsIEnumerable(new InvalidOperationException("Já existe um motorista cadastrado com esse CPF")));
                        }

                        session.StartTransaction();

                        var motorista = new Motorista
                        {
                            Cpf     = command.Cpf,
                            Idade   = command.Idade,
                            Nome    = command.Nome,
                            Sexo    = command.Sexo,
                            TipoCnh = command.TipoCnh,
                            PossuiVeiculoProprio = command.PossuiVeiculoProprio
                        };

                        await motoristaCollection.InsertOneAsync(motorista);

                        var registrarPassagemPeloTerminalCommand = new RegistrarPassagemPeloTerminal.Command
                        {
                            MotoristaId   = motorista.Id,
                            EstaCarregado = command.EstaCarregado,
                            TipoCaminhao  = command.TipoCaminhao,
                            Origem        = command.Origem,
                            Destino       = command.Destino
                        };

                        await _registrarPassagemPeloTerminalHandler.Handle(registrarPassagemPeloTerminalCommand);

                        session.CommitTransaction();

                        return(Resolved.Ok());
                    }
                    catch (Exception ex)
                    {
                        session.AbortTransaction();
                        return(Resolved.ErrAsIEnumerable(ex));
                    }
                }
            }