/// <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()));
            }
        }
Beispiel #2
0
        /// <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())));
        }