예제 #1
0
        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);
        }
예제 #2
0
        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));
        }