Пример #1
0
        public async Task <UserStatsModel> GetStatsByUserId(int id)
        {
            var user = await _userService.GetUserByIdAsync(id);

            if (user == null)
            {
                return(null);
            }

            var model = new UserStatsModel();

            model.UserId   = user.Id;
            model.UserName = user.FullName;

            model.PhotoCount = await _photoRepository.TableNoTracking
                               .Where(x => x.UserId == id)
                               .CountAsync();

            model.LocomotiveCount = await _photoLocomotiveRepository.TableNoTracking
                                    .Where(x => x.Photo.UserId == id)
                                    .Select(x => x.LocomotiveId)
                                    .Distinct()
                                    .CountAsync();

            // TODO: Add rolling stock stats

            model.LocationCount = await _photoRepository.TableNoTracking
                                  .Where(x => x.UserId == id)
                                  .Select(x => x.LocationId)
                                  .Distinct()
                                  .CountAsync();

            return(model);
        }
Пример #2
0
        public async Task <ActionResult <UserStatsModel> > GetUserStats(string userName)
        {
            try
            {
                var qry = await _repository.GetTripsByUserAsync(userName);

                var countries    = new List <CountryModel>();
                int countryCount = 0;
                int tripCount    = 0;

                foreach (var item in qry)
                {
                    countryCount += item.Stops.Select(s => s.Location.Country).Distinct().Count();

                    var mapped = _mapper.Map <CountryModel>(item.Stops.Select(s => s.Location.Country).Distinct().FirstOrDefault());
                    countries.Add(mapped);

                    tripCount += item.TripCode.Distinct().Count();
                }

                var result = new UserStatsModel()
                {
                    ContryCount = countryCount,

                    Countries = countries
                };
                return(result);
            }
            catch (Exception)
            {
                return(StatusCode(StatusCodes.Status500InternalServerError));
            }
        }
Пример #3
0
        public ActionResult UserStatistics()
        {
            List <UserStatsModel> stats = new List <UserStatsModel>();

            List <CreateUser> listUser;

            using (IDbConnection db = new SqlConnection(SqlAccess.GetConnectionString()))
            {
                listUser = db.Query <CreateUser>($"Select * from dbo.UserTable").ToList();
            }

            for (int i = 0; i < listUser.Count; i++)
            {
                UserStatsModel mod = new UserStatsModel();
                mod.ID           = listUser[i].ID;
                mod.Username     = listUser[i].Username;
                mod.Date         = listUser[i].Date;
                mod.DateModified = listUser[i].DateModified;
                mod.LastLogin    = listUser[i].LastLogin;
                mod.LastSignout  = listUser[i].LastSignout;
                mod.LoginAmount  = listUser[i].LoginAmount;
                mod.LoginFails   = listUser[i].LoginFails;


                stats.Add(mod);
            }

            return(View(stats));
        }
        /// <summary>
        /// Return the user account.
        /// </summary>
        /// <param name="Id"></param>
        /// <returns></returns>
        public IActionResult UserAccount(string Id)
        {
            if (!User.Identity.IsAuthenticated)
            {
                return(RedirectToAction("SignIn", "Account"));
            }


            using (IDbConnection connection = new MySqlConnection(connectionString))
            {
                if (Id == "null" || Id == null)
                {
                    Id = User.FindFirstValue(ClaimTypes.NameIdentifier);
                }

                UserViewModel  currUser  = AccountControllerHelperMethods.GetUser(Id, connection);
                UserStatsModel userStats = AccountControllerHelperMethods.GetUserStats(Id, connection);

                if (currUser == null)
                {
                    return(RedirectToAction("Error", "Home"));
                }

                posts = AccountControllerHelperMethods.GetAllUserPosts(Id, connection);

                ViewBag.CurrUser  = currUser;
                ViewBag.UserStats = userStats;
                ViewBag.Posts     = posts;
            }

            return(View(new ChangeProfileViewModel()));
        }
        /// <summary>
        /// Get user followers and followings for the given user.
        /// </summary>
        /// <param name="Id"></param>
        /// <param name="connection"></param>
        /// <returns></returns>
        public static UserStatsModel GetUserStats(string Id, IDbConnection connection)
        {
            var p = new DynamicParameters();

            p.Add("A_User_Id", Id);

            UserStatsModel userStats = connection.QueryFirst <UserStatsModel>("FindNumberOfFollowingsAndFollowers", p, commandType: CommandType.StoredProcedure);

            return(userStats);
        }
Пример #6
0
 internal static async Task UpdateStats()
 {
     try
     {
         UserStats = await API_URI.AppendPathSegment("userStats").WithOAuthBearerToken(Settings.AuthToken).GetJsonAsync <UserStatsModel>();
     }catch (Exception e)
     {
         Notify($"Error: {e.Message}", "Connection Failed");
         UserStats = null;
     }
 }
Пример #7
0
        public ActionResult Details(UserStatsModel model, string submitButton)
        {
            //check the other submit buttons and act on them, or continue
            switch (submitButton)
            {
            case "Edit":
                return(RedirectToAction("Edit", "Users", new{ username = model.Username }));

            case "Return":
                return(RedirectToAction("Index", "Users"));

            case "Customer Roles":
                return(RedirectToAction("CustomerRoles", "Users", new { username = model.Username }));
            }

            return(Details(model.Username));
        }
Пример #8
0
        // return user statistics for user profile overview
        public static UserStatsModel UserStatsModel(string userName)
        {
            var loadFunc = new Func <UserStatsModel>(() =>
            {
                var userStatsModel = new UserStatsModel();

                using (var db = new VoatOutOfRepositoryDataContextAccessor())
                {
                    // 5 subverses user submitted to most
                    var subverses = db.Submission.Where(a => a.UserName == userName && !a.IsAnonymized && !a.IsDeleted)
                                    .GroupBy(a => new { a.UserName, a.Subverse })
                                    .Select(g => new SubverseStats {
                        SubverseName = g.Key.Subverse, Count = g.Count()
                    })
                                    .OrderByDescending(s => s.Count)
                                    .Take(5)
                                    .ToList();

                    // total comment count
                    var comments = db.Comment.Count(a => a.UserName == userName && !a.IsDeleted);

                    // voting habits
                    var userData = new Domain.UserData(userName);

                    var commentUpvotes      = userData.Information.CommentVoting.UpCount;
                    var commentDownvotes    = userData.Information.CommentVoting.DownCount;
                    var submissionUpvotes   = userData.Information.SubmissionVoting.UpCount;
                    var submissionDownvotes = userData.Information.SubmissionVoting.DownCount;

                    //var commentUpvotes = db.CommentVoteTrackers.Count(a => a.UserName == userName && a.VoteStatus == 1);
                    //var commentDownvotes = db.CommentVoteTrackers.Count(a => a.UserName == userName && a.VoteStatus == -1);
                    //var submissionUpvotes = db.SubmissionVoteTrackers.Count(a => a.UserName == userName && a.VoteStatus == 1);
                    //var submissionDownvotes = db.SubmissionVoteTrackers.Count(a => a.UserName == userName && a.VoteStatus == -1);

                    // get 3 highest rated comments
                    var highestRatedComments = db.Comment
                                               .Include(x => x.Submission)
                                               .Where(a => a.UserName == userName && !a.IsAnonymized && !a.IsDeleted)
                                               .OrderByDescending(s => s.UpCount - s.DownCount)
                                               .Take(3)
                                               .ToList();

                    // get 3 lowest rated comments
                    var lowestRatedComments = db.Comment
                                              .Include(x => x.Submission)
                                              .Where(a => a.UserName == userName && !a.IsAnonymized && !a.IsDeleted)
                                              .OrderBy(s => s.UpCount - s.DownCount)
                                              .Take(3)
                                              .ToList();

                    var linkSubmissionsCount    = db.Submission.Count(a => a.UserName == userName && a.Type == 2 && !a.IsDeleted && !a.IsAnonymized);
                    var messageSubmissionsCount = db.Submission.Count(a => a.UserName == userName && a.Type == 1 && !a.IsDeleted && !a.IsAnonymized);

                    // get 5 highest rated submissions
                    var highestRatedSubmissions = db.Submission.Where(a => a.UserName == userName && !a.IsAnonymized && !a.IsDeleted)
                                                  .OrderByDescending(s => s.UpCount - s.DownCount)
                                                  .Take(5)
                                                  .ToList();

                    // get 5 lowest rated submissions
                    var lowestRatedSubmissions = db.Submission.Where(a => a.UserName == userName && !a.IsAnonymized && !a.IsDeleted)
                                                 .OrderBy(s => s.UpCount - s.DownCount)
                                                 .Take(5)
                                                 .ToList();

                    userStatsModel.TopSubversesUserContributedTo = subverses;
                    userStatsModel.LinkSubmissionsSubmitted      = linkSubmissionsCount;
                    userStatsModel.MessageSubmissionsSubmitted   = messageSubmissionsCount;
                    userStatsModel.LowestRatedSubmissions        = lowestRatedSubmissions;
                    userStatsModel.HighestRatedSubmissions       = highestRatedSubmissions;
                    userStatsModel.TotalCommentsSubmitted        = comments;
                    userStatsModel.HighestRatedComments          = highestRatedComments;
                    userStatsModel.LowestRatedComments           = lowestRatedComments;

                    userStatsModel.TotalCommentsUpvoted      = commentUpvotes;
                    userStatsModel.TotalCommentsDownvoted    = commentDownvotes;
                    userStatsModel.TotalSubmissionsUpvoted   = submissionUpvotes;
                    userStatsModel.TotalSubmissionsDownvoted = submissionDownvotes;

                    ////HACK: EF causes JSON to StackOverflow on the highest/lowest comments because of the nested loading EF does with the include option, therefore null the refs here.
                    //highestRatedComments.ForEach(x => x.Submission.Comments = null);
                    //lowestRatedComments.ForEach(x => x.Submission.Comments = null);
                }

                return(userStatsModel);
            });

            var cachedData = CacheHandler.Instance.Register(CachingKey.UserOverview(userName), loadFunc, TimeSpan.FromMinutes(30));

            return(cachedData);
        }
Пример #9
0
        // return user statistics for user profile overview
        public static UserStatsModel UserStatsModel(string userName)
        {
            var userStatsModel = new UserStatsModel();

            using (var db = new voatEntities())
            {
                // 5 subverses user submitted to most
                var subverses = db.Submissions.Where(a => a.UserName == userName && !a.IsAnonymized && !a.IsDeleted)
                                .GroupBy(a => new { a.UserName, a.Subverse })
                                .Select(g => new SubverseStats {
                    SubverseName = g.Key.Subverse, Count = g.Count()
                })
                                .OrderByDescending(s => s.Count)
                                .Take(5)
                                .ToList();

                // total comment count
                var comments = db.Comments.Count(a => a.UserName == userName);

                // voting habits
                var commentUpvotes      = db.CommentVoteTrackers.Count(a => a.UserName == userName && a.VoteStatus == 1);
                var commentDownvotes    = db.CommentVoteTrackers.Count(a => a.UserName == userName && a.VoteStatus == -1);
                var submissionUpvotes   = db.SubmissionVoteTrackers.Count(a => a.UserName == userName && a.VoteStatus == 1);
                var submissionDownvotes = db.SubmissionVoteTrackers.Count(a => a.UserName == userName && a.VoteStatus == -1);

                // get 3 highest rated comments
                var highestRatedComments = db.Comments
                                           .Include("Submission")
                                           .Where(a => a.UserName == userName && !a.IsAnonymized && !a.IsDeleted)
                                           .OrderByDescending(s => s.UpCount - s.DownCount)
                                           .Take(3)
                                           .ToList();

                // get 3 lowest rated comments
                var lowestRatedComments = db.Comments
                                          .Include("Submission")
                                          .Where(a => a.UserName == userName && !a.IsAnonymized && !a.IsDeleted)
                                          .OrderBy(s => s.UpCount - s.DownCount)
                                          .Take(3)
                                          .ToList();

                var linkSubmissionsCount    = db.Submissions.Count(a => a.UserName == userName && a.Type == 2 && !a.IsDeleted);
                var messageSubmissionsCount = db.Submissions.Count(a => a.UserName == userName && a.Type == 1 && !a.IsDeleted);

                // get 5 highest rated submissions
                var highestRatedSubmissions = db.Submissions.Where(a => a.UserName == userName && !a.IsAnonymized && !a.IsDeleted)
                                              .OrderByDescending(s => s.UpCount - s.DownCount)
                                              .Take(5)
                                              .ToList();

                // get 5 lowest rated submissions
                var lowestRatedSubmissions = db.Submissions.Where(a => a.UserName == userName && !a.IsAnonymized && !a.IsDeleted)
                                             .OrderBy(s => s.UpCount - s.DownCount)
                                             .Take(5)
                                             .ToList();

                userStatsModel.TopSubversesUserContributedTo = subverses;
                userStatsModel.LinkSubmissionsSubmitted      = linkSubmissionsCount;
                userStatsModel.MessageSubmissionsSubmitted   = messageSubmissionsCount;
                userStatsModel.LowestRatedSubmissions        = lowestRatedSubmissions;
                userStatsModel.HighestRatedSubmissions       = highestRatedSubmissions;
                userStatsModel.TotalCommentsSubmitted        = comments;
                userStatsModel.HighestRatedComments          = highestRatedComments;
                userStatsModel.LowestRatedComments           = lowestRatedComments;
                userStatsModel.TotalCommentsUpvoted          = commentUpvotes;
                userStatsModel.TotalCommentsDownvoted        = commentDownvotes;
                userStatsModel.TotalSubmissionsUpvoted       = submissionUpvotes;
                userStatsModel.TotalSubmissionsDownvoted     = submissionDownvotes;
            }

            return(userStatsModel);
        }
Пример #10
0
        // return user statistics for user profile overview
        public static UserStatsModel UserStatsModel(string userName)
        {
            var userStatsModel = new UserStatsModel();

            using (var db = new whoaverseEntities())
            {
                // 5 subverses user submitted to most
                var subverses = db.Messages.Where(a => a.Name == userName && !a.Anonymized)
                         .GroupBy(a => new { a.Name, a.Subverse })
                         .Select(g => new SubverseStats { SubverseName = g.Key.Subverse, Count = g.Count() })
                         .OrderByDescending(s => s.Count)
                         .Take(5)
                         .ToList();

                // total comment count
                var comments = db.Comments.Count(a => a.Name == userName);

                // voting habits
                var commentUpvotes = db.Commentvotingtrackers.Count(a => a.UserName == userName && a.VoteStatus == 1);
                var commentDownvotes = db.Commentvotingtrackers.Count(a => a.UserName == userName && a.VoteStatus == -1);
                var submissionUpvotes = db.Votingtrackers.Count(a => a.UserName == userName && a.VoteStatus == 1);
                var submissionDownvotes = db.Votingtrackers.Count(a => a.UserName == userName && a.VoteStatus == -1);

                // get 3 highest rated comments
                var highestRatedComments = db.Comments
                    .Include("Message")
                    .Where(a => a.Name == userName && !a.Anonymized)
                    .OrderByDescending(s => s.Likes - s.Dislikes)
                    .Take(3)
                    .ToList();

                // get 3 lowest rated comments
                var lowestRatedComments = db.Comments
                    .Include("Message")
                    .Where(a => a.Name == userName && !a.Anonymized)
                    .OrderBy(s => s.Likes - s.Dislikes)
                    .Take(3)
                    .ToList();

                var linkSubmissionsCount = db.Messages.Count(a => a.Name == userName && a.Type == 2);
                var messageSubmissionsCount = db.Messages.Count(a => a.Name == userName && a.Type == 1);

                // get 5 highest rated submissions
                var highestRatedSubmissions = db.Messages.Where(a => a.Name == userName && !a.Anonymized)
                    .OrderByDescending(s => s.Likes - s.Dislikes)
                    .Take(5)
                    .ToList();

                // get 5 lowest rated submissions
                var lowestRatedSubmissions = db.Messages.Where(a => a.Name == userName && !a.Anonymized)
                    .OrderBy(s => s.Likes - s.Dislikes)
                    .Take(5)
                    .ToList();

                userStatsModel.TopSubversesUserContributedTo = subverses;
                userStatsModel.LinkSubmissionsSubmitted = linkSubmissionsCount;
                userStatsModel.MessageSubmissionsSubmitted = messageSubmissionsCount;
                userStatsModel.LowestRatedSubmissions = lowestRatedSubmissions;
                userStatsModel.HighestRatedSubmissions = highestRatedSubmissions;
                userStatsModel.TotalCommentsSubmitted = comments;
                userStatsModel.HighestRatedComments = highestRatedComments;
                userStatsModel.LowestRatedComments = lowestRatedComments;
                userStatsModel.TotalCommentsUpvoted = commentUpvotes;
                userStatsModel.TotalCommentsDownvoted = commentDownvotes;
                userStatsModel.TotalSubmissionsUpvoted = submissionUpvotes;
                userStatsModel.TotalSubmissionsDownvoted = submissionDownvotes;
            }

            return userStatsModel;
        }
Пример #11
0
        public async Task <StatsModel> GetByUserIdAsync(int userId, bool fixBugIssue = true)
        {
            var userBets = _thermoBetContext
                           .Bets
                           .Where(b => b.UserId == userId);
            var succeedSwipesCount = _thermoBetContext
                                     .Users
                                     .SingleOrDefault(u => u.Id == userId)?
                                     .GlobalPoints;

            var winningsBets     = userBets.Count(ub => fixBugIssue ? (ub.Market.WinningSelectionId != ub.Selection.Id && ub.Market.WinningSelectionId.HasValue) : ub.Market.WinningSelectionId == ub.Selection.Id);
            var resultedBetCount = userBets.Count(ub => ub.Market.WinningSelectionId.HasValue);

            var userStats = new UserStatsModel
            {
                UserId             = userId,
                AllSwipesCount     = userBets.Count(),
                MonthlySwipesCount = userBets.Where(b => b.DateUtc.AddMonths(1) > DateTime.UtcNow).Count(),
                SucceedSwipesCount = succeedSwipesCount ?? 0,
                SucceedPercentage  = resultedBetCount == 0 ? 0 : (int)((decimal)winningsBets / resultedBetCount * 100)
            };

            var users = (await _thermoBetContext
                         .Users
                         .OrderByDescending(u => u.GlobalPoints)
                         .ToListAsync());

            //Calculate first 3 places
            var positions = users
                            .Select((u, i) => new { User = u, Index = i })
                            .Take(3)
                            .Select(u => GetStatsPositionModel(u.User, u.Index + 1))
                            .ToList();

            //Add 3 next positions
            if (positions.Any(p => p.UserId == userId))
            {
                var nextPositions = users
                                    .Select((u, i) => new { User = u, Index = i })
                                    .Skip(3)
                                    .Take(3)
                                    .Select(u => GetStatsPositionModel(u.User, u.Index + 1))
                                    .ToList();
                positions.AddRange(nextPositions);
            }
            else
            {
                var user = users
                           .Select((u, i) => new { UserId = u.Id, Index = i })
                           .SingleOrDefault(u => u.UserId == userId);

                if (user != null)
                {
                    var userPosition = user.Index + 1;

                    var nextPositions = users
                                        .Select((u, i) => new { User = u, Index = i })
                                        .Skip(userPosition == 4 ? 3 : (userPosition - 2))
                                        .Take(3)
                                        .Select(u => GetStatsPositionModel(u.User, u.Index + 1))
                                        .ToList();
                    positions.AddRange(nextPositions);
                }
            }

            var stats = new StatsModel
            {
                UserStats = userStats,
                Positions = positions
            };

            return(stats);
        }