public IActionResult UserSurveyDelete(int surveyId)
        {
            UserSurveyResponse response = new UserSurveyResponse();

            string userId = Request.Headers[Constants.UserToken];
            User   user;

            _memoryCache.TryGetValue(userId, out user);
            if (user == null)
            {
                return(Unauthorized(Messages.UserNotFoundError));
            }

            Survey survey = _dBContext.Survey.Where(x => x.CreatedBy == user.Userid && x.Surveyid == surveyId).FirstOrDefault();

            if (survey == null)
            {
                return(BadRequest(Messages.SurveyNotFoundError));
            }

            survey.StatusId = 3;

            int result = _dBContext.SaveChanges();

            if (result > 0)
            {
                response.Response = Messages.PollDeleteSuccess;
            }
            _memoryCache.Remove($"survey_id_{surveyId}");
            _memoryCache.Remove($"survey_guid_{survey.SurveyGuid}");
            return(Ok(response));
        }
        public IActionResult UserSurveyDelete(int surveyId)
        {
            UserSurveyResponse response = new UserSurveyResponse();

            string userguid      = Request.Headers[Constants.UserToken];
            string decyrptstring = Security.Decrypt(userguid);

            if (string.IsNullOrEmpty(decyrptstring))
            {
                return(BadRequest(Messages.UnauthorizedUserError));
            }

            User user = _dBContext.User.Where(x => x.UserGuid == decyrptstring).FirstOrDefault();

            if (user == null)
            {
                return(BadRequest(Messages.UserNotFoundError));
            }

            Survey survey = _dBContext.Survey.Where(x => x.CreatedBy == user.Userid && x.Surveyid == surveyId).FirstOrDefault();

            if (survey == null)
            {
                return(BadRequest(Messages.SurveyNotFoundError));
            }

            survey.StatusId = 3;

            int result = _dBContext.SaveChanges();

            if (result > 0)
            {
                response.Response = Messages.PollDeleteSuccess;
            }
            return(Ok(response));
        }
        public IActionResult UserSurvey(int pagenum, int pagesize)
        {
            string userguid = Request.Headers[Constants.UserToken];

            List <UserSurvey>  filteredUserSurveysList = new List <UserSurvey>();
            UserSurveyResponse usersurveyres           = new UserSurveyResponse();

            string decyrptstring = Security.Decrypt(userguid);

            if (string.IsNullOrEmpty(decyrptstring))
            {
                return(BadRequest("Unauthorized User"));
            }

            User user = _dBContext.User.Where(x => x.UserGuid == decyrptstring).FirstOrDefault();

            if (user == null)
            {
                return(BadRequest(Messages.UserNotFoundError));
            }

            List <Status> statuses = _dBContext.Status.ToList();

            var listSurveys = from survey in _dBContext.Survey
                              where survey.CreatedBy == user.Userid && survey.StatusId != 3
                              orderby survey.CreatedDate descending
                              select new UserSurvey()
            {
                surveyId   = survey.Surveyid,
                surveyGuid = survey.SurveyGuid,
                date       = survey.CreatedDate,
                surveyName = survey.Welcometitle,
                status     = survey.StatusId.ToString(),
                feedbacks  = 0
            };

            List <UserSurvey> totalUserSurveys = listSurveys.ToList();

            filteredUserSurveysList = totalUserSurveys.Skip(pagesize * pagenum)
                                      .Take(pagesize).ToList();

            List <int> pollIdsFilteredList = filteredUserSurveysList.Select(x => x.surveyId).ToList();

            List <SurveyUser> surveyUsers = (from eachSurvey in _dBContext.SurveyUser
                                             where pollIdsFilteredList.Contains(eachSurvey.SurveyId)
                                             select eachSurvey).ToList();

            var surveyFeedbacksReceived = (from eachSurvey in surveyUsers
                                           group new { eachSurvey.SurveyId } by new { eachSurvey.CompletedDatetime, eachSurvey.SurveyId } into eachGroup
                                           select eachGroup).ToList();

            //Update only finaly display values
            for (int i = 0; i < filteredUserSurveysList.Count(); i++)
            {
                filteredUserSurveysList[i].status    = statuses.Where(x => x.Statusid.ToString() == filteredUserSurveysList[i].status).SingleOrDefault().Statusname;
                filteredUserSurveysList[i].feedbacks = surveyFeedbacksReceived.Where(x => x.Key.SurveyId == filteredUserSurveysList[i].surveyId).Count();
            }

            usersurveyres.userSurveys  = filteredUserSurveysList;
            usersurveyres.totalSurveys = listSurveys.ToList().Count;

            return(Ok(usersurveyres));
        }
        public IActionResult UserSurvey(int pagenum, int pagesize)
        {
            string userId = Request.Headers[Constants.UserToken];

            List <UserSurvey>  filteredUserSurveysList = new List <UserSurvey>();
            UserSurveyResponse usersurveyres           = new UserSurveyResponse();

            User user;

            _memoryCache.TryGetValue(userId, out user);
            if (user == null)
            {
                return(Unauthorized(Messages.UserNotFoundError));
            }

            _memoryCache.TryGetValue($"user_surveys_{user.UserGuid}", out usersurveyres);
            if (usersurveyres != null)
            {
                return(Ok(usersurveyres));
            }
            usersurveyres = new UserSurveyResponse();

            List <Status> statuses = _dBContext.Status.ToList();

            var listSurveys = from survey in _dBContext.Survey
                              where survey.CreatedBy == user.Userid && survey.StatusId != 3
                              orderby survey.CreatedDate descending
                              select new UserSurvey()
            {
                surveyId   = survey.Surveyid,
                surveyGuid = survey.SurveyGuid,
                date       = survey.CreatedDate,
                surveyName = survey.Welcometitle,
                status     = survey.StatusId.ToString(),
                feedbacks  = 0
            };

            List <UserSurvey> totalUserSurveys = listSurveys.ToList();

            filteredUserSurveysList = totalUserSurveys.Skip(pagesize * pagenum)
                                      .Take(pagesize).ToList();

            List <int> pollIdsFilteredList = filteredUserSurveysList.Select(x => x.surveyId).ToList();

            List <SurveyFeedback> surveyFeedback = (from eachSurvey in _dBContext.SurveyFeedback
                                                    where pollIdsFilteredList.Contains(eachSurvey.SurveyId)
                                                    select eachSurvey).ToList();

            var surveyFeedbacksReceived = (from eachSurvey in surveyFeedback
                                           group new { eachSurvey.SurveyId } by new { eachSurvey.CompletedDatetime, eachSurvey.SurveyId } into eachGroup
                                           select eachGroup).ToList();

            //Update only finaly display values
            for (int i = 0; i < filteredUserSurveysList.Count(); i++)
            {
                filteredUserSurveysList[i].status    = statuses.Where(x => x.Statusid.ToString() == filteredUserSurveysList[i].status).SingleOrDefault().Statusname;
                filteredUserSurveysList[i].feedbacks = surveyFeedbacksReceived.Where(x => x.Key.SurveyId == filteredUserSurveysList[i].surveyId).Count();
            }

            usersurveyres.userSurveys  = filteredUserSurveysList;
            usersurveyres.totalSurveys = listSurveys.ToList().Count;

            _memoryCache.Set($"user_surveys_{user.UserGuid}", usersurveyres);
            return(Ok(usersurveyres));
        }