示例#1
0
        public PartialFindResult <SongListForApiContract> GetSongLists(
            int id,
            string query                = "",
            [FromUri] int[] tagId       = null,
            bool childTags              = false,
            NameMatchMode nameMatchMode = NameMatchMode.Auto,
            int start                     = 0, int maxResults = defaultMax, bool getTotalCount = false,
            SongListSortRule sort         = SongListSortRule.Name,
            SongListOptionalFields?fields = null)
        {
            var textQuery   = SearchTextQuery.Create(query, nameMatchMode);
            var queryParams = new SongListQueryParams {
                TextQuery = textQuery,
                SortRule  = sort,
                Paging    = new PagingProperties(start, maxResults, getTotalCount),
                TagIds    = tagId,
                ChildTags = childTags
            };

            return(queries.GetCustomSongLists(id, queryParams, fields ?? SongListOptionalFields.None));
        }
示例#2
0
        public PartialFindResult <SongListForApiContract> GetFeaturedLists(
            string query                = "",
            [FromUri] int[] tagId       = null,
            bool childTags              = false,
            NameMatchMode nameMatchMode = NameMatchMode.Auto,
            SongListFeaturedCategory?featuredCategory = null,
            int start                      = 0, int maxResults = defaultMax, bool getTotalCount = false,
            SongListSortRule sort          = SongListSortRule.Name,
            SongListOptionalFields fields  = SongListOptionalFields.None,
            ContentLanguagePreference lang = ContentLanguagePreference.Default)
        {
            var textQuery   = SearchTextQuery.Create(query, nameMatchMode);
            var queryParams = new SongListQueryParams {
                TextQuery        = textQuery,
                FeaturedCategory = featuredCategory,
                Paging           = new PagingProperties(start, maxResults, getTotalCount),
                SortRule         = sort,
                TagIds           = tagId,
                ChildTags        = childTags
            };

            return(queries.Find(s => new SongListForApiContract(s, lang, userIconFactory, entryImagePersister, fields), queryParams));
        }
示例#3
0
        public PartialFindResult <TResult> Find <TResult>(Func <SongList, TResult> fac, SongListQueryParams queryParams)
        {
            return(HandleQuery(ctx => {
                var listQuery = ctx.Query()
                                .WhereNotDeleted()
                                .WhereHasFeaturedCategory(queryParams.FeaturedCategory, false)
                                .WhereHasName(queryParams.TextQuery)
                                .WhereHasTags(queryParams.TagIds, queryParams.ChildTags);

                var count = queryParams.Paging.GetTotalCount ? listQuery.Count() : 0;

                return new PartialFindResult <TResult>(listQuery
                                                       .OrderBy(queryParams.SortRule)
                                                       .Paged(queryParams.Paging)
                                                       .ToArray()
                                                       .Select(s => fac(s))
                                                       .ToArray(), count);
            }));
        }
示例#4
0
        private PartialFindResult <T> GetSongsInList <T>(IDatabaseContext <SongList> session, SongListQueryParams queryParams,
                                                         Func <SongInList, T> fac)
        {
            var q = session.OfType <SongInList>().Query()
                    .Where(a => !a.Song.Deleted && a.List.Id == queryParams.ListId)
                    .WhereChildHasName(queryParams.TextQuery)
                    .WhereSongHasPVService(queryParams.PVServices)
                    .WhereSongHasArtists(queryParams.ArtistIds, queryParams.ChildVoicebanks)
                    .WhereSongHasTags(queryParams.TagIds)
                    .WhereSongHasType(queryParams.SongTypes)
                    .WhereMatchFilters(queryParams.AdvancedFilters);

            IQueryable <SongInList> resultQ = q.OrderBy(queryParams.SortRule, PermissionContext.LanguagePreference);

            resultQ = resultQ.Paged(queryParams.Paging);

            var contracts  = resultQ.ToArray().Select(s => fac(s)).ToArray();
            var totalCount = (queryParams.Paging.GetTotalCount ? q.Count() : 0);

            return(new PartialFindResult <T>(contracts, totalCount));
        }
示例#5
0
 public PartialFindResult <T> GetSongsInList <T>(SongListQueryParams queryParams, Func <SongInList, T> fac)
 {
     return(repository.HandleQuery(ctx => GetSongsInList(ctx, queryParams, fac)));
 }
示例#6
0
 public PartialFindResult <SongInListContract> GetSongsInList(SongListQueryParams queryParams)
 {
     return(repository.HandleQuery(session => GetSongsInList(session, queryParams, s => new SongInListContract(s, PermissionContext.LanguagePreference))));
 }
示例#7
0
        private PartialFindResult <T> GetSongsInList <T>(IRepositoryContext <SongList> session, SongListQueryParams queryParams,
                                                         Func <SongInList, T> fac)
        {
            var q = session.OfType <SongInList>().Query()
                    .Where(a => !a.Song.Deleted && a.List.Id == queryParams.ListId)
                    .WhereSongHasPVService(queryParams.PVServices);

            IQueryable <SongInList> resultQ = q.OrderBy(s => s.Order);

            resultQ = resultQ.Skip(queryParams.Paging.Start).Take(queryParams.Paging.MaxEntries);

            var contracts  = resultQ.ToArray().Select(s => fac(s)).ToArray();
            var totalCount = (queryParams.Paging.GetTotalCount ? q.Count() : 0);

            return(new PartialFindResult <T>(contracts, totalCount));
        }