public static int Insert(TokensRequest model, string userId)
        {
            int TokenId = 0;

            DataProvider.ExecuteNonQuery(GetConnection, "dbo.UserTokens_Insert",
                inputParamMapper: delegate(SqlParameterCollection paramCollection)
                {
                    paramCollection.AddWithValue("@Token", model.Token);
                    paramCollection.AddWithValue("@TokenTypeId", model.TokenTypeId);
                    paramCollection.AddWithValue("@UserId", userId);

                    SqlParameter p = new SqlParameter("@Id", System.Data.SqlDbType.Int);
                    p.Direction = System.Data.ParameterDirection.Output;

                    paramCollection.Add(p);

                }, returnParameters: delegate(SqlParameterCollection param)
            {
                int.TryParse(param["@Id"].Value.ToString(), out TokenId);
            }
            );

            return TokenId;
        }
        public HttpResponseMessage SendComfirmEmail(VerifyEmailRequest model)
        {
            if (!ModelState.IsValid)
            {
                return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
            }

            BaseResponse response = null;
            response = new SuccessResponse();

            HttpStatusCode code = HttpStatusCode.OK;

            ApplicationUser userVerification = _userService.GetUser(model.Email);

            if (userVerification == null)
            {
                response = new ErrorResponse("Cannot find a user with that email.");
                code = HttpStatusCode.BadRequest;
            }

            string userId = userVerification.Id;
            TokensRequest request = new TokensRequest();
            request.UserId = userId;
            request.Token = Guid.NewGuid();
            request.TokenTypeId = 2;

            ItemResponse<int> tokenAddResponse = new ItemResponse<int>();
            tokenAddResponse.Item = TokensService.Insert(request, userId);

            if (tokenAddResponse.Item <= 0)
            {
                response = new ErrorResponse("A new token was not inserted.");
                code = HttpStatusCode.BadRequest;
            }

            Guid uniqueId = request.Token;
            EmailRequest emailRequest = new EmailRequest();
            emailRequest.Email = model.Email;
            emailRequest.Subject = "Confirm Email";
            bool emailSent = MailService.ConfirmationEmail(emailRequest, uniqueId);

            if (!emailSent)
            {
                response = new ErrorResponse("The confirmation email failed to send.");
                code = HttpStatusCode.BadRequest;
            }

            return Request.CreateResponse(code, response);
        }
        public HttpResponseMessage forgotPassword(VerifyEmailRequest model)
        {
            if (!ModelState.IsValid)
            {
                return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
            }

            SuccessResponse response = new SuccessResponse();
            ApplicationUser userVerification = _userService.GetUser(model.Email);

            if (userVerification == null)
            {
                ErrorResponse er = new ErrorResponse("Cannot find a user with that email.");
                return Request.CreateResponse(HttpStatusCode.BadRequest, er);
            }

            string userId = userVerification.Id;
            TokensRequest request = new TokensRequest();
            request.UserId = userId;
            request.Token = Guid.NewGuid();
            request.TokenTypeId = 1;

            ItemResponse<int> tokenAddResponse = new ItemResponse<int>();
            tokenAddResponse.Item = TokensService.Insert(request, userId);

            if (tokenAddResponse.Item <= 0)
            {
                ErrorResponse er = new ErrorResponse("A new token was not inserted.");
                return Request.CreateResponse(HttpStatusCode.BadRequest, er);
            }

            Guid uniqueId = request.Token;
            EmailRequest emailRequest = new EmailRequest();
            emailRequest.Email = model.Email;
            emailRequest.Subject = "Password Reset";
            bool emailSent = MailService.resetPasswordEmail(emailRequest, uniqueId);

            if (!emailSent)
            {
                return Request.CreateResponse(HttpStatusCode.BadRequest, "The reset password email failed to send.");
            }

            return Request.CreateResponse(response);
        }