예제 #1
0
        public async Task <IActionResult> Index([FromRoute] ulong server)
        {
            var authEntry = HttpContext.GetAuthEntry();

            if (authEntry is null)
            {
                return(Redirect("/login"));
            }
            var userGuilds = await userService.GetAllowedUserGuilds(authEntry);

            if (!userGuilds.Any(x => x.Id == server))
            {
                return(Unauthorized());
            }
            var quotesTask     = audioOwnerRepo.GetAudioOwnersByOwner(server);
            var categoriesTask = quoteBotRepo.GetCategoriesByOwner(server);
            var pairsTask      = quoteBotRepo.GetAudioCategoriesByOwner(server);
            await Task.WhenAll(quotesTask, categoriesTask, pairsTask);

            var audio_owners      = await quotesTask;
            var categories        = await categoriesTask;
            var pairs             = await pairsTask;
            var paired_categories = pairs.Join(categories, pair => pair.CategoryId, category => category.Id, (pair, category) => (pair, category));;
            var result            = audio_owners.GroupJoin(
                paired_categories,
                audio_owner => audio_owner.Id, paired_categories => paired_categories.pair.AudioOwnerId,
                (quote, pairs) => (quote, pairs.Select(x => x.category).OrderBy(x => x.Name).ToList())
                ).OrderBy(x => x.quote.Name).ToList();

            return(View(new Models.Quotes.IndexViewModel(result, server)));
        }
예제 #2
0
        public async Task <IActionResult> Index(ulong server)
        {
            var authEntry = (AuthEntry)HttpContext.Items["key"];

            if (authEntry is null)
            {
                return(Redirect("/login"));
            }
            var userGuilds = await userService.GetAllowedUserGuilds(authEntry);

            if (!userGuilds.Any(x => x.Id == server))
            {
                return(Unauthorized());
            }
            var audio_owners = await audioOwnerRepo.GetAudioOwnersByOwner(server);

            var categories = await quoteBotRepo.GetCategoriesByOwner(server);

            var pairs = await quoteBotRepo.GetAudioCategoriesByOwner(server);

            var paired_quotes = pairs.Join(audio_owners, pair => pair.AudioOwnerId, quote => quote.Id, (pair, quote) => (pair, quote));
            var result        = categories.GroupJoin(paired_quotes,
                                                     category => category.Id,
                                                     pair => pair.pair.CategoryId,
                                                     (category, pairs) => (category, pairs.Select(x => x.quote).ToList())
                                                     ).OrderBy(x => x.category.Name).ToList();

            return(View(new IndexViewModel
            {
                Categories = result,
                AllAudio = audio_owners.ToList(),
                Server = server
            }));
        }