async Task LoadOptionsAsync(QuestionsIndexModel model) { //Subjects var subjects = await _subjectsService.FetchAsync(); subjects = subjects.GetOrdered(); _subjectsService.LoadSubItems(subjects); foreach (var item in subjects) { item.GetSubIds(); } model.Subjects = subjects.MapViewModelList(_mapper); //Recruits var recruits = await _recruitsService.FetchAsync(); recruits = recruits.GetOrdered(); _recruitsService.LoadSubItems(recruits); model.Recruits = recruits.MapViewModelList(_mapper); }
public async Task <ActionResult> Index(int subject, int term = 0, int recruit = 0, string keyword = "", int page = 1, int pageSize = 10) { if (page < 1) { var model = new QuestionsIndexModel(); await LoadOptionsAsync(model); return(Ok(model)); } Subject selectedSubject = _subjectsService.GetById(subject); if (selectedSubject == null) { ModelState.AddModelError("subject", "科目不存在"); return(BadRequest(ModelState)); } Term selectedTerm = null; ICollection <int> termIds = null; if (term > 0) { selectedTerm = _termsService.GetById(term); if (selectedTerm == null) { ModelState.AddModelError("term", "條文不存在"); return(BadRequest(ModelState)); } termIds = selectedTerm.GetSubIds(); termIds.Add(selectedTerm.Id); } var allRecruits = await _recruitsService.GetAllAsync(); Recruit selectedRecruit = null; List <int> recruitIds = new List <int>(); if (recruit > 0) { selectedRecruit = allRecruits.FirstOrDefault(x => x.Id == recruit); if (selectedRecruit == null) { ModelState.AddModelError("recruit", "招考年度不存在"); return(BadRequest(ModelState)); } recruitIds.Add(recruit); if (selectedRecruit.RecruitEntityType == RecruitEntityType.SubItem) { var partIds = allRecruits.Where(x => x.ParentId == recruit).Select(part => part.Id); recruitIds.AddRange(partIds.ToList()); recruitIds.Add(recruit); } } var questions = await _questionsService.FetchAsync(selectedSubject, termIds, recruitIds); if (questions.IsNullOrEmpty()) { return(Ok(questions.GetPagedList(_mapper, page, pageSize))); } var keywords = keyword.GetKeywords(); if (keywords.HasItems()) { questions = questions.FilterByKeyword(keywords); } List <Term> allTerms = (await _termsService.FetchAllAsync()).ToList(); List <UploadFile> attachments = (await _attachmentsService.FetchAsync(PostType.Option)).ToList(); var pagedList = questions.GetPagedList(_mapper, allRecruits.ToList(), attachments, allTerms, page, pageSize); foreach (var item in pagedList.ViewList) { item.Options = item.Options.OrderByDescending(o => o.Correct).ToList(); } return(Ok(pagedList)); }