public HttpResponseMessage LoginUser(UserLoginModel model)
        {
            var responseMsg = this.ExecuteOperationOrHandleExceptions(
                 () =>
                 {
                     //UserDataPersister.ValidateUsername(model.Username);
                     UserDataPersister.ValidateAuthCode(model.AuthCode);

                     var users = this.Data.Users;
                     var user = users.FirstOrDefault(
                           usr => usr.Email == model.Email && usr.AuthCode == model.AuthCode);

                     if (user == null)
                     {
                         throw new InvalidOperationException("Invalid Username or Password");
                     }

                     user.SessionKey = UserDataPersister.GenerateSessionKey(user.Id);
                     this.Data.SaveChanges();

                     var loggedModel = new UserLoggedModel
                     {
                         Email = user.Email,
                         SessionKey = user.SessionKey
                     };

                     var response = this.Request.CreateResponse(HttpStatusCode.Created, loggedModel);
                     response.Headers.Location = new Uri(Url.Link("DefaultApi", new { id = user.Id }));

                     return response;
                 });

            return responseMsg;
        }
        public HttpResponseMessage RegisterUser(UserRegisterModel model)
        {
            var responseMsg = this.ExecuteOperationOrHandleExceptions(
                 () =>
                 {
                     UserDataPersister.ValidateAuthCode(model.AuthCode);
                     //TODO: Validate Email
                     //UserDataPersister.ValidateEmail(model.Email);

                     var users = this.Data.Users;
                     var user = users.FirstOrDefault(
                           usr => usr.Email == model.Email);

                     if (user != null)
                     {
                         throw new InvalidOperationException("Wrong email.");
                     }

                     var newUser = new User
                     {
                         Email = model.Email,
                         AuthCode = model.AuthCode
                     };

                     var userInDb = this.Data.Users.Add(newUser);
                     this.Data.SaveChanges();

                     var sessionKey = UserDataPersister.GenerateSessionKey(userInDb.Id);
                     userInDb.SessionKey = sessionKey;
                     this.Data.SaveChanges();
                     var loggedModel = new UserLoggedModel
                     {
                         Email = userInDb.Email,
                         SessionKey = userInDb.SessionKey
                     };

                     var response = this.Request.CreateResponse(HttpStatusCode.Created, loggedModel);
                     response.Headers.Location = new Uri(Url.Link("DefaultApi", new { id = userInDb.Id }));

                     return response;
                 });

            return responseMsg;
        }