public Tuple <bool, string> Auth_EditUserModelValidation(Auth_EditUserModel editUser)
        {
            Tuple <bool, string> status = Tuple.Create(true, "Ok");

            if (isNotEmpty(editUser.firstname))
            {
                if (AtleastOneSymbol(editUser.firstname) || editUser.firstname.Any(char.IsDigit))
                {
                    return(Tuple.Create(false, "Your name should not contain any symbols or numbers"));
                }
            }
            if (isNotEmpty(editUser.lastname))
            {
                if (!AtleastOneSymbol(editUser.lastname) || editUser.lastname.Any(char.IsDigit))
                {
                    return(Tuple.Create(false, "Your name should not contain any symbols or numbers"));
                }
            }
            if (isNotEmpty(editUser.email))
            {
                if (!IsValidEmail(editUser.email))
                {
                    return(Tuple.Create(false, "Email is not a valid email."));
                }
            }
            return(status);
        }
        public static Auth_RegisterUserModel EditUserModel_To_RegisterUserModel(Auth_EditUserModel auth_EditProfileModel)
        {
            Auth_RegisterUserModel auth_RegisterModel = new Auth_RegisterUserModel();

            auth_RegisterModel.username  = auth_EditProfileModel.username;
            auth_RegisterModel.email     = auth_EditProfileModel.email;
            auth_RegisterModel.firstname = auth_EditProfileModel.firstname;
            auth_RegisterModel.lastname  = auth_EditProfileModel.lastname;

            return(auth_RegisterModel);
        }
        public static Auth_UserModel EditUserModel_To_UserModel(Auth_EditUserModel editModel)
        {
            Auth_UserModel auth_UserModel = new Auth_UserModel();

            auth_UserModel.username        = editModel.username;
            auth_UserModel.email           = editModel.email;
            auth_UserModel.firstname       = editModel.firstname;
            auth_UserModel.lastname        = editModel.lastname;
            auth_UserModel.googleSubjectID = "";
            auth_UserModel.isAdmin         = false;

            return(auth_UserModel);
        }
        public Auth_UserModel EditUser(Auth_EditUserModel editUser, int userID)
        {
            Auth_UserModel beforeUpdateUserData = authQuery.GetUsersData(userID);
            Auth_UserModel user = UserModelConverter.EditUserModel_To_UserModel(editUser);

            // this fields are not allwed to be changed here.
            user.userID          = beforeUpdateUserData.userID;
            user.googleSubjectID = beforeUpdateUserData.googleSubjectID;
            user.isAdmin         = beforeUpdateUserData.isAdmin;

            // if they fields are empty, populate with old data.
            if (string.IsNullOrEmpty(user.username))
            {
                user.username = beforeUpdateUserData.username;
            }
            if (string.IsNullOrEmpty(user.firstname))
            {
                user.firstname = beforeUpdateUserData.firstname;
            }
            if (string.IsNullOrEmpty(user.lastname))
            {
                user.lastname = beforeUpdateUserData.lastname;
            }
            if (string.IsNullOrEmpty(user.email))
            {
                user.email = beforeUpdateUserData.email;
            }
            if (string.IsNullOrEmpty(user.password))
            {
                user.password = beforeUpdateUserData.password;
            }
            else
            {
                user.password = Hash.HashPassword(user.password);
            }

            // Database interaction
            authQuery.EditUser(user);
            // Return the user
            return(user);
        }
        public IActionResult EditUser([FromBody] Auth_EditUserModel editUser)
        {
            Console.WriteLine("api/auth/edituser");

            // Authenticate
            int userID = Authenticate();

            if (userID == -1)
            {
                return(StatusCode(405, "Authorization token is not valid."));
            }

            // Check if user already exist
            if (_authAction.DoesEmailExist(editUser.email))
            {
                return(StatusCode(405, "Email already exist."));
            }
            if (_authAction.DoesUsernameExist(editUser.username))
            {
                return(StatusCode(405, "Username already exist."));
            }

            // Validate user inputed data
            Tuple <bool, string> validation = _inputValidations.Auth_EditUserModelValidation(editUser);

            if (!validation.Item1)
            {
                return(StatusCode(405, validation.Item2));
            }

            _authAction.EditUser(editUser, userID);

            if (UpdateToken(userID))
            {
                return(Ok("Successfully edited your account!"));
            }
            else
            {
                return(StatusCode(500, "something went wrong"));
            }
        }