/// <summary> /// get a list of ganjoor poems probable metres /// </summary> /// <param name="paging"></param> /// <returns></returns> public async Task <RServiceResult <(PaginationMetadata PagingMeta, GanjoorPoemCompleteViewModel[] Items)> > GetUnreviewedGanjoorPoemProbableMetres(PagingParameterModel paging) { try { var source = from probable in _context.GanjoorPoemProbableMetres.AsNoTracking() where probable.Metre != "dismissed" select probable; (PaginationMetadata PagingMeta, GanjoorPoemProbableMetre[] Items)paginatedResult = await QueryablePaginator <GanjoorPoemProbableMetre> .Paginate(source, paging); List <GanjoorPoemCompleteViewModel> poems = new List <GanjoorPoemCompleteViewModel>(); foreach (var next in paginatedResult.Items) { var res = await GetPoemById(next.PoemId); var poem = res.Result; poem.GanjoorMetre = new GanjoorMetre() { Id = next.Id, Rhythm = next.Metre }; poems.Add(poem); } return(new RServiceResult <(PaginationMetadata PagingMeta, GanjoorPoemCompleteViewModel[] Items)>((paginatedResult.PagingMeta, poems.ToArray()))); } catch (Exception exp) { return(new RServiceResult <(PaginationMetadata PagingMeta, GanjoorPoemCompleteViewModel[] Items)>((null, null), exp.ToString())); } }
/// <summary> /// get user bookmarks (artifacts and items) /// </summary> /// <param name="paging"></param> /// <param name="userId"></param> /// <returns></returns> public async Task <RServiceResult <(PaginationMetadata PagingMeta, GanjoorUserBookmarkViewModel[] Bookmarks)> > GetUserBookmarks(PagingParameterModel paging, Guid userId) { var source = _context.GanjoorUserBookmarks .Include(b => b.Poem).ThenInclude(p => p.Cat).ThenInclude(c => c.Poet) .Where(b => b.UserId == userId) .OrderByDescending(b => b.DateTime) .AsQueryable(); (PaginationMetadata PagingMeta, GanjoorUserBookmark[] Bookmarks)bookmarksPage = await QueryablePaginator <GanjoorUserBookmark> .Paginate(source, paging); List <GanjoorUserBookmarkViewModel> result = new List <GanjoorUserBookmarkViewModel>(); foreach (var bookmark in bookmarksPage.Bookmarks) { var verses = await _context.GanjoorVerses.AsNoTracking().Where(v => v.PoemId == bookmark.PoemId && v.CoupletIndex == bookmark.CoupletIndex).OrderBy(v => v.VOrder).ToListAsync(); result.Add ( new GanjoorUserBookmarkViewModel() { Id = bookmark.Id, PoetName = bookmark.Poem.Cat.Poet.Nickname, PoetImageUrl = $"{WebServiceUrl.Url}{$"/api/ganjoor/poet/image/{bookmark.Poem.FullUrl.Substring(1, bookmark.Poem.FullUrl.IndexOf('/', 1) - 1)}.gif"}", PoemFullTitle = bookmark.Poem.FullTitle, PoemFullUrl = bookmark.Poem.FullUrl, CoupletIndex = bookmark.CoupletIndex, VerseText = verses.Count == 0 ? "" : verses[0].Text, Verse2Text = verses.Count < 2 ? "" : verses[1].Text, DateTime = bookmark.DateTime, PrivateNote = bookmark.PrivateNote } ); } return(new RServiceResult <(PaginationMetadata PagingMeta, GanjoorUserBookmarkViewModel[] Bookmarks)> ((bookmarksPage.PagingMeta, result.ToArray()))); }