public UserInfoModel GetUserInfo(
            [ValueProvider(typeof(HeaderValueProviderFactory<string>))] string sessionKey)
        {
            var responseMsg = this.PerformOperationAndHandleExceptions(() =>
            {
                var user = this.Data.Users.All().FirstOrDefault(
                    x => x.SessionKey == sessionKey);

                if (user == null || sessionKey == string.Empty)
                {
                    throw new InvalidOperationException("Invalid sessionKey");
                }

                var model = new UserInfoModel()
                {
                    Id = user.Id,
                    Name = user.Name,
                    Role = user.UserRole.Role,
                    Level = user.Level.Name
                };

                return model;
            });

            return responseMsg;
        }
        public HttpResponseMessage PostLevelUpUser(
            [ValueProvider(typeof(HeaderValueProviderFactory<string>))] string sessionKey)
        {
            var responseMsg = this.PerformOperationAndHandleExceptions(
              () =>
              {
                  var user = this.Data.Users.All().FirstOrDefault(
                      x => x.SessionKey == sessionKey);

                  if (user == null || sessionKey == string.Empty)
                  {
                      throw new InvalidOperationException("Invalid sessionKey");
                  }

                  var records = this.Data.Records.All().Where(x => x.UserId == user.Id).ToList();
                  foreach (Record record in records)
                  {
                      this.Data.Records.Delete(record);
                  }

                  this.Data.SaveChanges();

                  var levelRank = user.Level.Rank;
                  var upLevel = this.Data.Levels.All().Where(x => x.Rank == levelRank + 1).FirstOrDefault();
                  if (upLevel == null)
                  {
                      throw new InvalidOperationException("There are no more levels");
                  }

                  user.Level = upLevel;
                  this.Data.SaveChanges();

                  var model = new UserInfoModel()
                  {
                      Id = user.Id,
                      Name = user.Name,
                      Role = user.UserRole.Role,
                      Level = user.Level.Name
                  };

                  var response =
                      this.Request.CreateResponse(HttpStatusCode.OK, model);
                  return response;
              });

            return responseMsg;
        }