示例#1
0
        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);
        }
示例#2
0
        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());
        }