public HttpResponseMessage registerCard([FromBody] Card cardData)
        {
            List <Card> userCards = null;
            string      returnJson;

            if (true)   //TODO: IMPLEMENTAR VALIDAÇÂO DOS DADOS DO CARTÃO
            {
                cards.TryGetValue(cardData.userLogin, out userCards);

                if (userCards == null)
                {
                    userCards = new List <Card>();
                    cards.Add(cardData.userLogin, userCards);
                }

                cardData.password = PasswordEncryptUtil.getInstance().encryptPassword(cardData.password);

                userCards.Add(cardData);

                returnJson = "{\"Sucess\":\"true\",\"Code\":\"" + CardReturnEnum.CARD_REGISTER_SUCESS + "\",\"Message\":\"Cartão Registrado com sucesso.\"}";
            }



            var response = Request.CreateResponse(HttpStatusCode.OK);

            response.Content = new StringContent(returnJson, Encoding.UTF8, "application/json");

            return(response);
        }
        public UserController()
        {
            if (users.Count == 0)
            {
                //Usuarios mocados para teste
                User user1 = new User("leo", PasswordEncryptUtil.getInstance().encryptPassword("Leo123"), "Leonardo");
                User user2 = new User("vini", PasswordEncryptUtil.getInstance().encryptPassword("Vini123"), "Vinicius");
                User user3 = new User("claudia", PasswordEncryptUtil.getInstance().encryptPassword("Claudia1"), "Claudia");

                users.Add(user1);
                users.Add(user2);
                users.Add(user3);
            }
        }
        public HttpResponseMessage registerUser([FromBody] User userData)
        {
            string returnJson;

            if (UserHelper.getInstance().validateUser(userData, out returnJson))
            {
                userData.password = PasswordEncryptUtil.getInstance().encryptPassword(userData.password);
                users.Add(userData);
                returnJson = "{\"Sucess\":\"true\",\"Code\":\"" + UserReturnEnum.USER_REGISTERED + "\",\"Message\":\"Usuário Cadastrado\"}";
            }

            var response = Request.CreateResponse(HttpStatusCode.OK);

            response.Content = new StringContent(returnJson, Encoding.UTF8, "application/json");

            return(response);
        }
        public HttpResponseMessage loginUser([FromBody] User userData)
        {
            string returnJson = "";

            if (string.IsNullOrEmpty(userData.login))
            {
                returnJson = "{\"Sucess\":\"false\",\"Code\":\"" + UserReturnEnum.USER_LOGIN_REQUIRED + "\",\"Message\":\"Informe o login do usuário\"}";
            }
            else if (string.IsNullOrEmpty(userData.password))
            {
                returnJson = "{\"Sucess\":\"false\",\"Code\":\"" + UserReturnEnum.USER_PASSWORD_REQUIRED + "\",\"Message\":\"Informe a senha do usuário\"}";
            }

            if (string.IsNullOrEmpty(returnJson))
            {
                User user = null;

                try
                {
                    user = users.First(x => x.login.Equals(userData.login));
                }
                catch (InvalidOperationException e)
                {
                    // Não encontrou o usuário
                }


                if (user != null && user.password.Equals(PasswordEncryptUtil.getInstance().encryptPassword(userData.password)))
                {
                    returnJson = "{\"Sucess\":\"true\",\"Code\":\"" + UserReturnEnum.USER_LOGIN_SUCESS + "\",\"Message\":\"Usuário Logado com sucesso\"}";
                }
                else
                {
                    returnJson = "{\"Sucess\":\"false\",\"Code\":\"" + UserReturnEnum.USER_LOGIN_REJECT + "\",\"Message\":\"Não foi possível efetuar o login\"}";
                }
            }

            var response = Request.CreateResponse(HttpStatusCode.OK);

            response.Content = new StringContent(returnJson, Encoding.UTF8, "application/json");

            return(response);
        }
        public CardController()
        {
            if (cards.Count == 0)
            {
                //Cartão mocado para teste
                List <Card> listCards = new List <Card>();
                Card        card      = new Card("leo", "Leo P Thurler", "1", "20/11/2050", "Visa", PasswordEncryptUtil.getInstance().encryptPassword("1234"), "CHIP", "500");

                listCards.Add(card);

                cards.Add("leo", listCards);
            }
        }
        /// <summary>
        /// Método responsável por realizar as validações dos dados da transação
        /// </summary>
        /// <param name="transaction">Dados da transação</param>
        /// <param name="error">Caso tenha algum erro de validação essa variável é preenchida com o json de retorno</param>
        /// <param name="cardData">Retorna os dados do cartão utilizado</param>
        /// <returns>Retorna verdadeiro caso a transação seja válida e falso caso não seja.</returns>
        public bool validateTransaction(Transaction transaction, out string error, out Card cardData)
        {
            bool validateStatus = true;

            error    = "";
            cardData = null;

            if (float.Parse(transaction.amount) < 0.1)
            {
                error = "{\"Sucess\":\"false\",\"Code\":\"" + TransactionReturnEnum.INVALID_VALUE + "\",\"Message\":\"Valor inválido: mínimo de 10 centavos.\"}";
            }

            else
            {
                List <Card> userCards = null;

                CardController.cards.TryGetValue(transaction.userLogin, out userCards);

                if (userCards != null)
                {
                    cardData = userCards.Find(x => x.number.Equals(transaction.card.number) && x.password.Equals(PasswordEncryptUtil.getInstance().encryptPassword(transaction.card.password)));

                    //TODO: IMPLEMENTAR VALIDAÇÂO DA DATA DO CARTÂO PARA VERIFICAR SE ELE ESTÁ EXPIRADO

                    if (cardData == null)
                    {
                        error = "{\"Sucess\":\"false\",\"Code\":\"" + TransactionReturnEnum.INVALID_CARD + "\",\"Message\":\"Dados do cartão inválido\"}";
                    }
                    else if (float.Parse(transaction.amount) > float.Parse(cardData.balance))
                    {
                        error = "{\"Sucess\":\"false\",\"Code\":\"" + TransactionReturnEnum.INSUFICIENTE_BALANCE + "\",\"Message\":\"Saldo Insuficiente.\"}";
                    }
                    else
                    {
                        transaction.card = cardData;
                    }
                }
                else
                {
                    error = "{\"Sucess\":\"false\",\"Code\":\"" + TransactionReturnEnum.INVALID_CARD + "\",\"Message\":\"Dados do cartão inválido\"}";
                }
            }



            if (!string.IsNullOrEmpty(error))
            {
                validateStatus = false;
            }

            return(validateStatus);
        }