public async Task <IActionResult> RequestToken([FromBody] UsuarioViewModel viewModel)
        {
            var usuarioGerenciamento = _provider.GetRequiredService <UsuarioGerenciamento> ();

            if (!await usuarioGerenciamento.Autenticar(viewModel.MapTo(new Usuario())))
            {
                return(new CredenciaisInvalidaJson());
            }

            var claims = new [] {
                new Claim(ClaimTypes.Name, viewModel.Codigo)
            };

            var key = new SymmetricSecurityKey(
                Encoding.UTF8.GetBytes(_configuration["SecurityKey"])
                );

            var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

            var token = new JwtSecurityToken(
                issuer: "emprestimoJogos.net",
                audience: "emprestimoJogos.net",
                claims: claims,
                expires: DateTime.Now.AddMinutes(30),
                signingCredentials: creds
                );

            return(Ok(new {
                token = new JwtSecurityTokenHandler().WriteToken(token)
            }));
        }
        public async Task<IActionResult> Post ([FromBody] UsuarioViewModel viewModel) {
            var usuarioGerenciamento = _provider.GetRequiredService<UsuarioGerenciamento> ();

            if (!await usuarioGerenciamento.Insert (viewModel.MapTo (new Usuario ()))) {
                return new UsuarioErrorJson (usuarioGerenciamento);
            }

            return Created ();
        }
        public async Task<IActionResult> Put ([FromRoute] long id, [FromBody] UsuarioViewModel viewModel) {
            var usuarioGerenciamento = _provider.GetRequiredService<UsuarioGerenciamento> ();
            await usuarioGerenciamento.GetById (id);
            viewModel.MapTo (usuarioGerenciamento.Usuario);

            if (!await usuarioGerenciamento.Update ()) {
                return new UsuarioErrorJson (usuarioGerenciamento);
            }

            return new UsuarioJson (usuarioGerenciamento.Usuario);
        }