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))); }
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 })); }