Пример #1
0
        public async Task <IActionResult> Index()
        {
            var count = await _repository.CountAsync(null);

            var items = await _repository.GetListAsync(null, 0, count);

            var tz = TZConvert.GetTimeZoneInfo("Russian Standard Time");

            var surveysModel = new List <SurveyModel>();

            items.ForEach(p => surveysModel.Add(new SurveyModel
            {
                Id        = p.Id,
                Title     = p.Title,
                CreatedAt = TimeZoneInfo.ConvertTimeFromUtc(p.CreatedAt.UtcDateTime, tz),
                IsActive  = p.IsActive
            }));

            return(View(surveysModel));
        }
Пример #2
0
        public async Task <IActionResult> Create()
        {
            var count = await _surveyRepository.CountAsync(p => p.IsActive, p => p.Push);

            var items = await _surveyRepository.GetListAsync(null, 0, count, p => p.IsActive, p => p.Push);

            var surveys = new List <SelectListItem>();

            items.ForEach(p => surveys.Add(
                              new SelectListItem
            {
                Text  = p.Title,
                Value = p.Id.ToString()
            }
                              ));


            var pushModel = new PushModel {
                Surveys = surveys
            };

            return(View(pushModel));
        }
Пример #3
0
        public async Task <ActionResult <SurveyResponse> > GetQuestionary([FromQuery] int userId, [FromQuery] string type,
                                                                          [FromQuery] string order,
                                                                          [FromQuery] int?skip,
                                                                          [FromQuery] int?take)
        {
            int count = 0;
            var user  = await _userRepository.GetAsync(userId);

            List <Survey> items = null;

            if (type == "all" || string.IsNullOrEmpty(type))
            {
                count = await _surveyRepository.CountAsync(s => s.IsActive);

                items = await _surveyRepository.GetListAsync(order, skip ?? 0, take ?? count, s => s.IsActive,
                                                             p => p.Likes);
            }
            else
            {
                switch (type)
                {
                case "mine":
                {
                    //var userId = GetUserId();
                    //if (userId == null)
                    //        return Unauthorized();
                    var email = user?.Email;


                    count = await _surveyRepository.CountAsync(s => s.SurveyUser.Any(u => u.User.Email == email),
                                                               s => s.SurveyUser);

                    items = await _surveyRepository.GetListAsync(order, skip ?? 0, take ?? count, s => s.SurveyUser.Any(u => u.User.Email == email),
                                                                 s => s.SurveyUser, p => p.Likes);

                    //items = items.Where(s => s.SurveyUser.Any(u => u.User.Email == userId))?.ToList();
                    break;
                }

                case "uncompleted":
                    if (GetUserId() == null)
                    {
                        count = await _surveyRepository.CountAsync(s => s.IsActive &&
                                                                   (s.NeedToBeFinishedForStart == s.NeedToBeFinishedFor ||
                                                                    s.NeedToBeFinishedFor.LocalDateTime > DateTime.Now) &&
                                                                   s.Limit > s.NumberOfUser,
                                                                   s => s.SurveyUser);

                        items = await _surveyRepository.GetListAsync(order, skip ?? 0, take ?? count, p => p.IsActive &&
                                                                     (p.NeedToBeFinishedForStart == p.NeedToBeFinishedFor ||
                                                                      p.NeedToBeFinishedFor.LocalDateTime > DateTime.Now) &&
                                                                     p.Limit > p.NumberOfUser,
                                                                     s => s.SurveyUser, p => p.Likes);
                    }
                    else
                    {
                        count = await _surveyRepository.CountAsync(s => !s.SurveyUser.Any(u => u.User.Email == GetUserId() && u.IsFinished ) &&
                                                                   s.IsActive &&
                                                                   (s.NeedToBeFinishedForStart == s.NeedToBeFinishedFor ||
                                                                    s.NeedToBeFinishedFor.LocalDateTime > DateTime.Now) &&
                                                                   s.Limit > s.NumberOfUser,
                                                                   s => s.SurveyUser);

                        items = await _surveyRepository.GetListAsync(order, skip ?? 0, take ?? count, p => p.IsActive &&
                                                                     !p.SurveyUser.Any(u => u.User.Email == GetUserId() && u.IsFinished) &&
                                                                     (p.NeedToBeFinishedForStart == p.NeedToBeFinishedFor ||
                                                                      p.NeedToBeFinishedFor.LocalDateTime > DateTime.Now) &&
                                                                     p.Limit > p.NumberOfUser,
                                                                     s => s.SurveyUser, p => p.Likes);
                    }

                    //items = items.Where(s => !s.SurveyUser.Any(u => u.IsFinished)).ToList();
                    break;

                case "best":
                    count = await _surveyRepository.CountAsync(s => s.Likes.Count > 0 && s.IsActive, s => s.Likes);

                    items = await _surveyRepository.GetListAsync("like", skip ?? 0, take ?? count,
                                                                 p => p.IsActive && p.Likes.Count > 0,
                                                                 p => p.Likes);

                    //items = items.Where(s => s.Likes.Count > 0).ToList();
                    break;
                }
            }

            var response = new SurveyResponse
            {
                Count = count,
                Items = new List <SurveyItem>()
            };


            items?.ForEach(p => response.Items.Add(new SurveyItem
            {
                Id                     = p.Id,
                Title                  = p.Title,
                Description            = p.Text,
                Score                  = p.Score,
                LimitCnt               = p.Limit,
                CurrentCnt             = p.NumberOfUser,
                CreatedAt              = p.CreatedAt,
                TimeForCompleting      = p.NeedToBeFinishedFor,
                TimeForCompletingStart = p.NeedToBeFinishedForStart,
                LikeCnt                = p.Likes?.Count ?? 0,
                IsLiked                = p.Likes?.FirstOrDefault(m => m.UserId == user?.Id) != null
            }));

            return(response);
        }