public PasswordChangeResponse ChangePassword(int UserID, string oldPassword, string newPassword)
        {
            PasswordChangeResponse response = new PasswordChangeResponse();
            User user = _userRepository.Get(t => t.ID == UserID && t.Password == Cryptor.sha512encrypt(oldPassword)).FirstOrDefault();

            if (user == null)
            {
                response.SetStatus(Constants.ResponseCode.INVALID_USERNAME_OR_PASSWORD);
                return(response);
            }

            try
            {
                user.Password = Cryptor.sha512encrypt(newPassword);
                _userRepository.Update(user);
                _unitOfWork.SaveChanges();
                response.SetStatus(Constants.ResponseCode.SUCCESS);
                return(response);
            }
            catch (Exception)
            {
                response.SetStatus(Constants.ResponseCode.SYSTEM_ERROR);
                return(response);
            }
        }
        public PasswordChangeResponse CheckPasswordChangeCode(string Email, string Code)
        {
            PasswordChangeResponse response = new PasswordChangeResponse();

            if (Email == null || Email == "" || Code == null || Code == "")
            {
                response.SetStatus(Constants.ResponseCode.FAILED);
                return(response);
            }
            User user = _userRepository.Get(t => t.Email == Email).FirstOrDefault();

            if (user == null)
            {
                response.SetStatus(Constants.ResponseCode.FAILED);
                return(response);
            }
            if (user.PasswordChanges.LastOrDefault().ChangeCode != Code)
            {
                response.SetStatus(Constants.ResponseCode.FAILED);
                return(response);
            }

            if (user.PasswordChanges.FirstOrDefault(t => t.ChangeCode == Code).IsExpired())
            {
                response.SetStatus(Constants.ResponseCode.EXPIRED_CODE);
                return(response);
            }

            response.Email          = user.Email;
            response.PassChangeCode = user.PasswordChanges.FirstOrDefault(t => t.ChangeCode == Code).ChangeCode;
            response.SetStatus(Constants.ResponseCode.SUCCESS);
            return(response);
        }
        public PasswordChangeResponse ChangePassword(string Email, string Code, string newPassword)
        {
            PasswordChangeResponse response = CheckPasswordChangeCode(Email, Code);

            try
            {
                if (response.Code == (int)Constants.ResponseCode.SUCCESS)
                {
                    User user = _userRepository.Get(t => t.Email == Email).FirstOrDefault();
                    user.Password = Cryptor.sha512encrypt(newPassword);

                    _userRepository.Update(user);
                    _unitOfWork.SaveChanges();
                    response.SetStatus(Constants.ResponseCode.SUCCESS);
                    return(response);
                }
                else
                {
                    response.SetStatus(Constants.ResponseCode.FAILED);
                    return(response);
                }
            }
            catch (Exception)
            {
                response.SetStatus(Constants.ResponseCode.SYSTEM_ERROR);
                return(response);
            }
        }
        public PasswordChangeResponse SendPasswordChangeCode(string Email)
        {
            PasswordChangeResponse response = new PasswordChangeResponse();

            if (Email == null || Email == "")
            {
                response.SetStatus(Constants.ResponseCode.FAILED);
                return(response);
            }
            User user = _userRepository.Get(t => t.Email == Email).FirstOrDefault();

            if (user == null)
            {
                response.SetStatus(Constants.ResponseCode.FAILED);
                return(response);
            }

            string PassChangeCode = RandomGenerator.Generate(6);

            MailRequest mailRequest = new MailRequest
            {
                ToMail      = user.Email,
                ToName      = user.FullName(),
                Subject     = "B-Commerce Şifre Yenileme",
                Body        = $"Şifre yenileme kodunuz: {PassChangeCode}",
                ProjectCode = "123456"
            };

            HttpClient httpClient = new HttpClient();

            httpClient.BaseAddress = new Uri(Constants.NOTIFICATION_API_BASE_URI);

            Task <HttpResponseMessage> httpResponse = httpClient.PostAsJsonAsync(Constants.NOTIFICATION_API_MAIL_URI, mailRequest);

            if (!httpResponse.Result.IsSuccessStatusCode)
            {
                response.SetStatus(Constants.ResponseCode.FAILED);
                return(response);
            }
            try
            {
                user.PasswordChanges.Add(new PasswordChange
                {
                    ChangeCode = PassChangeCode,
                    Email      = user.Email
                });
                _unitOfWork.SaveChanges();
                response.Email = user.Email;
                response.SetStatus(Constants.ResponseCode.SUCCESS);
                return(response);
            }
            catch (Exception)
            {
                response.SetStatus(Constants.ResponseCode.SYSTEM_ERROR);
                return(response);
            }
        }