public HttpResponseMessage Register(UserRegisterDto registerDto)
        {
            var operationResult = this.PerformOperationAndHandleExceptions(() =>
            {
                if (ModelState.IsValid && registerDto != null)
                {
                    var existingUser = NationalPlacesDAL.Get <User>("UsersInformation")
                                       .FirstOrDefault(x => x.UserName == registerDto.UserName.ToLower() ||
                                                       x.NickName.ToLower() == registerDto.NickName.ToLower());
                    if (existingUser != null)
                    {
                        throw new InvalidOperationException("User name or nickname is already taken");
                    }

                    var newUser = UserRegisterDto.CreateUser(registerDto);
                    NationalPlacesDAL.Add(newUser, "UsersInformation");

                    newUser.SessionKey = this.GenerateSessionKey(newUser.Id.Value.Pid);
                    NationalPlacesDAL.SaveEntity(newUser, "UsersInformation");


                    var loginInforrmation = UserLoggedInDto.FromUser.Compile()(newUser);

                    var response = Request.CreateResponse(HttpStatusCode.Created, loginInforrmation);
                    return(response);
                }
                else
                {
                    var errors       = String.Join("\n ", ModelState.Values.SelectMany(x => x.Errors).Select(x => x.ErrorMessage));
                    var errorMessage = string.Format("User input was not validated:\n {0}", errors);
                    throw new ArgumentException(errorMessage);
                }
            });

            return(operationResult);
        }