private LoggedInUserHomeViewModel GetLoggedInUserHomeViewModel(User user) { var followedChannels = this.DbContext.Channels .Where(c => c.Followers.Any(f => f.User.Username == user.Username)) .Select(c => new ChannelViewModel { Id = c.Id, Name = c.Name, Type = c.Type, FollowersCount = c.Followers.Count(), }).ToArray(); var followedChannelsTags = this.DbContext.Channels .Where(c => c.Followers.Any(f => f.User.Username == user.Username)) .SelectMany(c => c.Tags.Select(t => t.TagId)).ToArray(); var suggestedChannels = this.DbContext.Channels .Where(c => c.Followers.All(f => f.User.Username != user.Username) && c.Tags.Any(t => followedChannelsTags.Contains(t.TagId))) .Select(c => new ChannelViewModel() { Id = c.Id, Name = c.Name, Type = c.Type, FollowersCount = c.Followers.Count(), }).ToArray(); var followedAndSuggestedChannelsIds = followedChannels.Select(c => c.Id).ToArray() .Concat(suggestedChannels.Select(c => c.Id).ToArray()).Distinct(); var seeOtherChannels = this.DbContext.Channels .Where(c => !followedAndSuggestedChannelsIds.Contains(c.Id)) .Select(c => new ChannelViewModel() { Id = c.Id, Name = c.Name, Type = c.Type, FollowersCount = c.Followers.Count(), }) .ToArray(); var loggedInUserHomeViewModel = new LoggedInUserHomeViewModel { FollowedChannels = followedChannels, SuggestedChannels = suggestedChannels, SeeOtherChannelViewModels = seeOtherChannels, }; return(loggedInUserHomeViewModel); }
public IHttpResponse Index() { var user = this.DbContext.Users.FirstOrDefault(u => u.Username == this.User.Username); if (user != null) { var loggedInUserHomeViewModel = new LoggedInUserHomeViewModel { Tasks = this.DbContext.Tasks.Where(t => !t.IsReported).Select(t => new TaskViewModel() { Id = t.Id, Title = t.Title, Level = t.Sectors.Count(), }).ToArray(), }; return(this.View("UserHomeIndex", loggedInUserHomeViewModel)); } return(this.View()); }