public async Task <IActionResult> Subscribe() { Console.WriteLine($"/pollinator/atom/subscribe{Request.QueryString}"); string uriQuery = Request.Query["uri"]; var user = await GetUserFromUriQuery(uriQuery); var aggregator = await GetAggregatorFromUriQuery(uriQuery); if (user == null && aggregator == null) { return(Ok()); } var author = await _userManager.GetUserAsync(User); if (user != null) { // user subscription // only add subscription when the subscription doesn't already exist // and if the requested user is not the author if (await _userSubscriptionManager.FindAsync(author, user) == null && user.Id != author.Id) { // add subscription if (!await _userSubscriptionManager.AddAsync(author, user)) { return(StatusCode(500)); } } // redirect request to /user/{userId} return(await AtomUser(user.Id)); } else { // aggregator subscription // only add subscription when the subscription doesn't already exist // and if the requested aggregator author is not the author if (await _aggregatorSubscriptionManager.FindAsync(author, aggregator) == null && author.Id != aggregator.AuthorId) { // add subscription if (!await _aggregatorSubscriptionManager.AddAsync(author, aggregator)) { return(StatusCode(500)); } } // redirect request to /aggregator/{id} return(await Aggregator(aggregator.AggregatorId)); } }
public async Task <IActionResult> OnGet(Int64 id) { Console.WriteLine($"/community/assetBrowser/profile/{id}{Request.QueryString}"); ProfileUser = await _userManager.FindByIdAsync($"{id}"); CurrentUser = await _userManager.GetUserAsync(User); // make sure ProfileUser exists if (ProfileUser == null) { return(NotFound()); } Subscribed = await _userSubscriptionManager.FindAsync(CurrentUser, ProfileUser) != null; AchievementIndex = 0; NextAchievementIndex = 3; PreviousAchievementIndex = -1; AssetIndex = 0; NextAssetIndex = 10; PreviousAssetIndex = -1; AggregatorIndex = 0; NextAggregatorIndex = 5; PreviousAggregatorIndex = -1; var requestQuery = Request.Query; if (requestQuery.ContainsKey("achievementIndex") && Int32.TryParse(requestQuery["achievementIndex"], out Int32 achievementIndex)) { AchievementIndex = achievementIndex; NextAchievementIndex = achievementIndex + 3; PreviousAchievementIndex = achievementIndex - 3; } if (requestQuery.ContainsKey("assetIndex") && Int32.TryParse(requestQuery["assetIndex"], out Int32 creationIndex)) { AssetIndex = creationIndex; NextAssetIndex = creationIndex + 10; PreviousAssetIndex = creationIndex - 10; } if (requestQuery.ContainsKey("aggregatorIndex") && Int32.TryParse(requestQuery["aggregatorIndex"], out Int32 sporecastIndex)) { AggregatorIndex = sporecastIndex; NextAggregatorIndex = sporecastIndex + 5; PreviousAggregatorIndex = sporecastIndex - 5; } var unlockedAchievementIds = await _achievementManager.FindAllByAuthorAsync(ProfileUser); UnlockedAchievementCount = unlockedAchievementIds == null ? 0 : unlockedAchievementIds.Length; UnlockedAchievementIds = unlockedAchievementIds? .Reverse() .Skip(AchievementIndex) .Take(3) .ToArray(); var assets = await _assetManager.FindAllByUserIdAsync(ProfileUser.Id); AssetCount = assets == null ? 0 : assets.Length; Assets = assets? .OrderByDescending(a => a.Timestamp) .Skip(AssetIndex) .Take(10) .ToArray(); var aggregators = await _aggregatorManager.FindByAuthorAsync(ProfileUser); AggregatorCount = aggregators == null ? 0 : aggregators.Length; Aggregators = aggregators? .OrderByDescending(a => a.Timestamp) .Skip(AggregatorIndex) .Take(5) .ToArray(); var aggregatorSubscriptions = await _aggregatorSubscriptionManager.FindAllByAuthorAsync(CurrentUser); AggregatorSubscriptions = aggregatorSubscriptions .Select(s => s.AggregatorId) .ToArray(); return(Page()); }