public HttpResponseMessage Put(Guid id, Survey survey)
        {
            if (string.IsNullOrWhiteSpace(survey.Name))
            {
                throw this.WebException(HttpStatusCode.BadRequest, "Survey name cannot be empty");
            }

            var currentSurvey = this.surveyRepository.Get(id);
            if (currentSurvey != null)
            {
                if (!currentSurvey.Name.Equals(survey.Name, StringComparison.InvariantCulture))
                {
                    currentSurvey.Name = survey.Name;
                    currentSurvey.Slug = currentSurvey.Name.GenerateSlug();
                }

                currentSurvey.Description = survey.Description;

                this.surveyRepository.Update(currentSurvey, survey.Questions);

                // Response Message
                return this.Request.CreateResponse<Survey>(HttpStatusCode.OK, currentSurvey);
            }
            else
            {
                // We are not supporting creation through PUT
                throw this.WebException(HttpStatusCode.NotFound);
            }
        }
        public Survey Insert(Survey survey)
        {
            if (survey == null)
            {
                throw new ArgumentNullException("survey", "Parameter survey cannot be null.");
            }

            var addedSurvey = this.surveyContext.Surveys.Add(survey);
            this.surveyContext.SaveChanges();

            return addedSurvey;
        }
        public void Update(Survey survey, ICollection<SurveyQuestion> updatedQuestions)
        {
            if (survey == null)
            {
                throw new ArgumentNullException("survey", "Parameter survey cannot be null.");
            }

            var entry = this.surveyContext.Entry(survey);
            var attachedSurvey = this.surveyContext.Surveys.Attach(survey);

            // TODO: Review this (there should be a better way to update survey questions automatically - Review DB design)
            this.UpdateQuestions(attachedSurvey.Questions, updatedQuestions);
            
            entry.State = EntityState.Modified;
            this.surveyContext.SaveChanges();
        }
        public HttpResponseMessage Post(Survey survey)
        {
            if (string.IsNullOrWhiteSpace(survey.Name))
            {
                throw this.WebException(HttpStatusCode.BadRequest, "Survey name cannot be empty");
            }

            survey.Slug = survey.Name.GenerateSlug();
            var addedSurvey = this.surveyRepository.Insert(survey);

            // Response Message
            var response = this.Request.CreateResponse<Survey>(HttpStatusCode.Created, addedSurvey);
            var surveyUri = Url.Link("SurveysApi", new { Id = addedSurvey.Id });
            response.Headers.Location = new Uri(surveyUri);
            
            return response;
        }