private async Task <LoginToResponse> Login(UserToLogin userLogin, SigningConfigurations signingConfigurations, TokenConfiguration tokenConfigurations)
        {
            if (userLogin.Email.IsEmail() && !string.IsNullOrEmpty(userLogin.Password))
            {
                var repository = UserRepository.GetInstance(_context);

                var user = await repository.GetUserLogin(userLogin.Email, userLogin.Password);

                if (user != null)
                {
                    var token = GenerateToken.TokenGenerate(user.Email, signingConfigurations, tokenConfigurations);

                    var userDisplay = user.ToDisplay();

                    if (user.Admin)
                    {
                        var repositoryBusiness = EstablishmmentRepository.GetInstance(_context);

                        userDisplay.Establishmments = repositoryBusiness.GetByAdmin(user.Id).ToDisplay();
                    }

                    return(LoginToResponse.Create(userDisplay, token));
                }
            }
            return(null);
        }
        public async Task <Json> PostLogin([FromBody] UserToLogin userLogin, [FromServices] SigningConfigurations signingConfigurations, [FromServices] TokenConfiguration tokenConfigurations)
        {
            var user = await Login(userLogin, signingConfigurations, tokenConfigurations);

            if (user != null)
            {
                var userResponse = LoginToResponse.Create(user.User, user.Token);

                return(Json.Ok("Usuário Validado e autenticado!.", userResponse));
            }
            else
            {
                if (Get(userLogin.Email).StatusCode.Value.Equals(200))
                {
                    return(Json.NotFound("Senha inválida", false));
                }

                return(Json.NotFound("Usuário não cadastrado!", false));
            }
        }
        public async Task <Json> PostCreate([FromBody] UserToCreate userSend, [FromServices] SigningConfigurations signingConfigurations, [FromServices] TokenConfiguration tokenConfigurations)
        {
            var repositoy = UserRepository.GetInstance(_context);

            if (repositoy.EmailValidation(userSend.Email))
            {
                return(Json.Conflit("Este email está sendo utilizado por outro usuário", userSend));
            }

            var userValidate = userSend.ToValidate();

            if (userValidate.Erro)
            {
                return(Json.Conflit("Erro ao validar usuário, verifique os erros", userValidate.Erros));
            }

            var userCreate = await repositoy.Create(userSend.ToUserData());

            if (userCreate.Erro)
            {
                return(Json.Conflit("Falha ao criar usuário!", userCreate.Description));
            }

            var userLogin = UserToLogin.Create(userSend.Email, userSend.Password);

            var login = await Login(userLogin, signingConfigurations, tokenConfigurations);

            if (login == null)
            {
                return(Json.BadRequest("Falha ao criar usuário", userSend));
            }

            var userResponse = LoginToResponse.Create(login.User, login.Token);

            return(Json.Ok("Ususário criado com sucesso!", userResponse));
        }