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); }
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)); } }
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); }
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; } }
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)); }
// 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); }
// 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); }
// 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; }
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); }