async Task SaveTermNotes(Term term) { var termIds = new List <int>() { term.Id }; if (term.SubItems.HasItems()) { termIds.AddRange(term.GetSubIds()); } var notes = await _notesService.FetchAsync(termIds); var postIds = notes.Select(x => x.Id).ToList(); var attachments = (await _attachmentsService.FetchAsync(PostType.Note, postIds)).ToList(); var noteViewList = notes.MapViewModelList(_mapper, attachments.ToList()); var termViewModel = term.MapViewModel(_mapper); _dataService.SaveTermNotes(termViewModel, noteViewList); }
public async Task <ActionResult> Index(int mode = 0, int term = 0, int subject = 0, string keyword = "") { if (term > 0) { var selectedTerm = _termsService.GetById(term); var termViewModel = await LoadTermViewModelAsync(mode, selectedTerm); if (termViewModel.SubItems.HasItems()) { return(Ok(termViewModel.SubItems)); } else { return(Ok(new List <TermViewModel> { termViewModel })); } } else if (subject > 0) { var keywords = keyword.GetKeywords(); Subject selectedSubject = await _subjectsService.GetByIdAsync(subject); int parent = -1; //科目底下所有條文 var terms = (await _termsService.FetchAsync(selectedSubject, parent)); var termIds = terms.Select(x => x.Id).ToList(); if (terms.HasItems()) { _termsService.LoadSubItems(terms); if (keywords.HasItems()) { terms = terms.FilterByKeyword(keywords); } terms = terms.GetOrdered(); } var termViewModelList = new List <TermViewModel>(); foreach (var item in terms) { var termViewModel = await LoadTermViewModelAsync(mode, item); termViewModelList.Add(termViewModel); } if (keywords.HasItems()) { var notes = await _notesService.FetchAsync(termIds); notes = notes.FilterByKeyword(keywords); if (notes.HasItems()) { foreach (int termId in notes.Select(x => x.TermId).Distinct()) { var exist = termViewModelList.FirstOrDefault(x => x.Id == termId); if (exist == null) { var selectedTerm = _termsService.GetById(termId); var noteInTerms = notes.Where(x => x.TermId == termId); var termViewModel = await LoadTermViewModelAsync(mode, selectedTerm); termViewModelList.Add(termViewModel); } } termViewModelList = termViewModelList.OrderBy(item => item.Order).ToList(); } } return(Ok(termViewModelList)); } ModelState.AddModelError("params", "錯誤的查詢參數"); return(BadRequest(ModelState)); }