Пример #1
0
        public static bool IsVeteran(UserDetailsContract details)
        {
            var timeOnSite = DateTime.Now - details.CreateDate;

            return
                (details.Active &&
                 details.GroupId >= UserGroupId.Regular &&
                 timeOnSite.TotalDays > 365 &&
                 details.EditCount > 1000);
        }
Пример #2
0
        public static int GetPower(UserDetailsContract detailsContract, int ownedAlbumCount, int albumRatingCount, int songListCount)
        {
            ParamIs.NotNull(() => detailsContract);

            var power =
                detailsContract.EditCount / 4
                + detailsContract.SubmitCount / 2
                + detailsContract.TagVotes * 2
                + detailsContract.AlbumCollectionCount * 2
                + ownedAlbumCount * 5
                + albumRatingCount * 3
                + detailsContract.FavoriteSongCount * 2
                + detailsContract.CommentCount * 4
                + songListCount * 5
                + (detailsContract.EmailVerified ? 100 : 0);

            return(power);
        }
Пример #3
0
        private UserDetailsContract GetUserDetails(ISession session, User user)
        {
            var details = new UserDetailsContract(user, PermissionContext);

            details.AlbumCollectionCount
                = session.Query <AlbumForUser>().Count(c => c.User == user && !c.Album.Deleted);

            details.ArtistCount
                = session.Query <ArtistForUser>().Count(c => c.User == user && !c.Artist.Deleted);

            details.FavoriteSongCount
                = session.Query <FavoriteSongForUser>().Count(c => c.User == user && !c.Song.Deleted);

            details.CommentCount
                = session.Query <AlbumComment>().Count(c => c.Author == user && !c.Album.Deleted)
                  + session.Query <ArtistComment>().Count(c => c.Author == user && !c.Artist.Deleted)
                  + session.Query <SongComment>().Count(c => c.Author == user && !c.Song.Deleted);

            details.EditCount
                = session.Query <ArchivedAlbumVersion>().Count(c => c.Author == user && !c.Album.Deleted)
                  + session.Query <ArchivedArtistVersion>().Count(c => c.Author == user && !c.Artist.Deleted)
                  + session.Query <ArchivedSongVersion>().Count(c => c.Author == user && !c.Song.Deleted);

            details.LatestComments = session.Query <UserComment>()
                                     .Where(c => c.User == user).OrderByDescending(c => c.Created).Take(3)
                                     .ToArray()
                                     .Select(c => new CommentContract(c)).ToArray();

            details.SubmitCount
                = session.Query <ArchivedAlbumVersion>().Count(c => c.Author == user && c.Version == 0 && !c.Album.Deleted)
                  + session.Query <ArchivedArtistVersion>().Count(c => c.Author == user && c.Version == 0 && !c.Artist.Deleted)
                  + session.Query <ArchivedSongVersion>().Count(c => c.Author == user && c.Version == 0 && !c.Song.Deleted);

            details.TagVotes
                = session.Query <TagVote>().Count(t => t.User == user);

            details.Power = UserHelper.GetPower(details, user);
            details.Level = UserHelper.GetLevel(details.Power);

            return(details);
        }
Пример #4
0
        public static int GetPower(UserDetailsContract detailsContract, User user)
        {
            ParamIs.NotNull(() => detailsContract);
            ParamIs.NotNull(() => user);

            var ownedAlbumCount  = user.Albums.Count(a => a.PurchaseStatus == PurchaseStatus.Owned);
            var albumRatingCount = user.Albums.Count(a => a.Rating != 0);
            var songListCount    = detailsContract.SongLists.Count();

            var power =
                detailsContract.EditCount / 4
                + detailsContract.SubmitCount / 2
                + detailsContract.TagVotes * 2
                + detailsContract.AlbumCollectionCount * 2
                + ownedAlbumCount * 5
                + albumRatingCount * 3
                + detailsContract.FavoriteSongCount * 2
                + detailsContract.CommentCount * 4
                + songListCount * 5;

            return(power);
        }
Пример #5
0
        public UserDetailsContract GetUserDetails(int userID)
        {
            var userDetails = new UserDetailsContract();

            return(userDetails);
        }
Пример #6
0
        private UserDetailsContract GetUserDetails(IRepositoryContext <User> session, User user)
        {
            var details = new UserDetailsContract(user, PermissionContext);

            var stats = session.Query().Where(u => u.Id == user.Id).Select(u => new UserStats {
                AlbumCollectionCount = u.AllAlbums.Count(a => !a.Album.Deleted),
                ArtistCount          = u.AllArtists.Count(a => !a.Artist.Deleted),
                FavoriteSongCount    = u.FavoriteSongs.Count(c => !c.Song.Deleted),
                OwnedAlbumCount      = u.AllAlbums.Count(a => !a.Album.Deleted && a.PurchaseStatus == PurchaseStatus.Owned),
                RatedAlbumCount      = u.AllAlbums.Count(a => !a.Album.Deleted && a.Rating != 0),
            }).First();

            details.AlbumCollectionCount = stats.AlbumCollectionCount;
            details.ArtistCount          = stats.ArtistCount;
            details.FavoriteSongCount    = stats.FavoriteSongCount;

            details.FavoriteAlbums = session.Query <AlbumForUser>()
                                     .Where(c => c.User.Id == user.Id && !c.Album.Deleted && c.Rating > 3)
                                     .OrderByDescending(c => c.Rating)
                                     .ThenByDescending(c => c.Id)
                                     .Select(a => a.Album)
                                     .Take(7)
                                     .ToArray()
                                     .Select(c => new AlbumContract(c, LanguagePreference))
                                     .ToArray();

            details.FavoriteTags = session.Query <SongTagUsage>()
                                   .Where(c => c.Song.UserFavorites.Any(f => f.User.Id == user.Id) && c.Tag.CategoryName != "Lyrics" && c.Tag.CategoryName != "Distribution")
                                   .GroupBy(t => t.Tag.Name)
                                   .OrderByDescending(t => t.Count())
                                   .Select(t => t.Key)
                                   .Take(8)
                                   .ToArray();

            details.FollowedArtists = session.Query <ArtistForUser>()
                                      .Where(c => c.User.Id == user.Id && !c.Artist.Deleted)
                                      .OrderByDescending(a => a.Id)
                                      .Select(c => c.Artist)
                                      .Take(6)
                                      .ToArray()
                                      .Select(c => new ArtistContract(c, LanguagePreference))
                                      .ToArray();

            details.LatestComments = session.Query <UserComment>()
                                     .Where(c => c.User == user).OrderByDescending(c => c.Created).Take(3)
                                     .ToArray()
                                     .Select(c => new CommentContract(c)).ToArray();

            details.LatestRatedSongs = session.Query <FavoriteSongForUser>()
                                       .Where(c => c.User.Id == user.Id && !c.Song.Deleted)
                                       .OrderByDescending(c => c.Id)
                                       .Select(c => c.Song)
                                       .Take(6)
                                       .ToArray()
                                       .Select(c => new SongContract(c, LanguagePreference))
                                       .ToArray();

            var cachedStats = GetCachedUserStats(session, user);

            details.CommentCount = cachedStats.CommentCount;
            details.EditCount    = cachedStats.EditCount;
            details.SubmitCount  = cachedStats.SubmitCount;
            details.TagVotes     = cachedStats.TagVotes;

            details.Power = UserHelper.GetPower(details, stats.OwnedAlbumCount, stats.RatedAlbumCount);
            details.Level = UserHelper.GetLevel(details.Power);

            if (user.Active && user.GroupId >= UserGroupId.Regular && user.Equals(PermissionContext.LoggedUser) && !user.AllOwnedArtists.Any())
            {
                var producerTypes = new[] { ArtistType.Producer, ArtistType.Animator, ArtistType.Illustrator };
                details.PossibleProducerAccount = session.Query <ArtistName>().Any(a => !a.Artist.Deleted &&
                                                                                   producerTypes.Contains(a.Artist.ArtistType) &&
                                                                                   a.Value == user.Name &&
                                                                                   !a.Artist.OwnerUsers.Any());
            }

            return(details);
        }