public LoginResponse Login(User userData)
        {
            try
            {
            #warning TODO:all responses should just use the generic ResponseDataStore<Type>
                RequestLogin rl = new RequestLogin
                {
                    username = userData.username,
                    password = userData.password
                };
                ResponseDatastore<User> response = base.GetResponse<User>(rl, null, DatastoreType.Login);

            #warning TODO:need to find out the response when login fails.
                LoginResponse lr = new LoginResponse
                {
                    User = response?.ResponseBody,
                    ResponseMessage = response?.ResponseBody == null ? "Login failed" : "",
                    ResponseValue = response?.ResponseBody != null
                };
                return lr;
            }//try
            catch (Exception ex)
            {
                ex.Data["User Login Data"] = userData.ToXml() + "";
                return new LoginResponse
                {
                    ResponseMessage = ex.GetBaseException().Message,
                    ResponseValue = false,
                    User = null,
                };
            }
        }
        public RegistrationResponse Register(User user)
        {
            try
            {
                bool validUser = this.ValidateUserRegistration(user);

                if (validUser)
                {
                    ResponseDatastore<ObjectCreatedResponse> rp = base.PostResponse<ObjectCreatedResponse>(user,
                        user.sessionToken, DatastoreType.Users);

                    bool created = rp != null && rp.HttpStatusCode == HttpStatusCode.Created;

                    return new RegistrationResponse
                    {
                        ResponseValue = created,
                        ResponseMessage = created ? "" : "Error registering user."
                    };
                }//if

                return new RegistrationResponse
                {
                    ResponseValue = false,
                    ResponseMessage = "User already exists."
                };
            }
            catch (Exception ex)
            {
                ex.Data["User"] = user.ToXml() + "";
                throw;
            }
        }
        private bool ValidateUserRegistration(User user)
        {
            try
            {
                bool isNewUser = this.CheckDuplicateRegistration(user.email);

                return isNewUser;
            }//try
            catch (Exception ex)
            {
                ex.Data["User"] = user.ToXml() + "";
                return false;
            }
        }
        public LocationResponse CheckIn(User data)
        {
            try
            {
                ResponseDatastore<User> r = base.GetObject<User>(data.sessionToken, new Dictionary<string, string>(1) { { "userName", data.username } });

                if (r == null
                    || r.HttpStatusCode != HttpStatusCode.OK
                    || r.ResponseBody == null
                    || !string.IsNullOrWhiteSpace(r.ResponseBody.garageID))
                {
                    return new LocationResponse
                    {
                        ResponseValue = false,
                        ResponseMessage =
                            r == null
                            ? "User was not found! Unable to check in."
                            : "User is already checked in! Unable to check in until the user checks out of the previous parking garage!"
                    };
                }//if

                User u = r.ResponseBody;
                u.garageID = data.garageID;

                ResponseDatastore<ObjectUpdatedResponse> updateResponse = base.UpdateObject(u, data.sessionToken);

                LocationResponse lr = new LocationResponse
                {
                    ResponseValue = updateResponse?.ResponseBody != null,
                    ResponseMessage = ""
                };
                return lr;
            }//try
            catch (Exception ex)
            {
                ex.Data["Checkin Data"] = data.ToXml() + "";
                return new LocationResponse
                {
                    ResponseMessage = ex.GetBaseException().Message,
                    ResponseValue = false
                };
            }//catch
        }