public void DeleteUserAccount(UserDto userDto) { var usId = GetUserId(); // some kind of safety check. if (userDto.id != usId) { throw new ApplicationException("User id missmatch"); // The id in the request header should always be the same as sent by client. } using (var db = new Db.BgDbContext()) { var dbUser = db.Users.Single(u => u.Id.ToString() == usId); // maybe delete all records in player table, (has to be modeled out) dbUser.Name = "deleted"; dbUser.Elo = 0; dbUser.SocialProvider = ""; dbUser.Email = ""; dbUser.GameCount = 0; dbUser.PhotoUrl = ""; dbUser.ShowPhoto = false; dbUser.ProviderId = ""; dbUser.PreferredLanguage = ""; dbUser.Admin = false; db.SaveChanges(); } }
private ToplistResult[] GetThisWeeksToplist(string userId) { using (var db = new Db.BgDbContext()) { var weekAgo = DateTime.Now.AddDays(-7); var top10 = db.Users .OrderByDescending(u => u.Elo) .Where(u => u.Id != Guid.Empty && u.Name != "deleted") // filter guest and deleted .Where(u => u.Players.Any(p => p.Game.Started > weekAgo)) .Take(10) .Select(user => new { id = user.Id, name = user.Name, elo = user.Elo, }) .ToArray(); var results = new ToplistResult[top10.Length]; for (int i = 0; i < top10.Length; i++) { results[i] = new ToplistResult { place = i + 1, name = top10[i].name, elo = top10[i].elo, you = top10[i].id.ToString() == userId }; } return(results); } }
public void SaveUser(UserDto userDto) { var usId = GetUserId(); using (var db = new Db.BgDbContext()) { var dbUser = db.Users.Single(u => u.Id.ToString() == usId); dbUser.Name = userDto.name; db.SaveChanges(); } }
internal static User GetDbUser(string userId) { if (string.IsNullOrWhiteSpace(userId)) { userId = Guid.Empty.ToString(); } using (var db = new Db.BgDbContext()) { return(db.Users.SingleOrDefault(u => u.Id.ToString() == userId)); } }
public Toplist GetToplist() { var userId = GetUserId(); var thisWeek = GetThisWeeksToplist(userId); using (var db = new Db.BgDbContext()) { var top10 = db.Users .OrderByDescending(u => u.Elo) .Where(u => u.Id != Guid.Empty && u.Name != "deleted") // filter guest and deleted .Take(10) .Select(user => new { id = user.Id, name = user.Name, elo = user.Elo, }) .ToArray(); var results = new ToplistResult[top10.Length]; for (int i = 0; i < top10.Length; i++) { results[i] = new ToplistResult { place = i + 1, name = top10[i].name, elo = top10[i].elo, you = top10[i].id.ToString() == userId }; } var youEntry = db.Users.Single(u => u.Id.ToString() == userId); // This has to be the last call, because the connection then will be closed. var myRank = db.ExcecuteScalar("GetRank", ("Id", userId)); // to prevent reading entire table into this app a stored procedure is called on the server. var you = new ToplistResult() { elo = youEntry.Elo, name = youEntry.Name, place = myRank, you = true }; var topList = new Toplist { results = results, you = you, thisWeek = thisWeek }; return(topList); } }
public void SaveUser(UserDto userDto) { var usId = GetUserId(); using (var db = new Db.BgDbContext()) { var dbUser = db.Users.Single(u => u.Id.ToString() == usId); dbUser.Name = userDto.name; dbUser.PreferredLanguage = userDto.preferredLanguage; dbUser.Theme = userDto.theme; dbUser.EmailNotifications = userDto.emailNotification; dbUser.ShowPhoto = userDto.showPhoto; db.SaveChanges(); } }
public void GetToplist(ErrorReportDto dto) { var userId = GetUserOrGuestId(); using (var db = new Db.BgDbContext()) { db.ErrorReports.Add(new ErrorReport() { Error = dto.Error, Reporter = db.Users.Single(u => u.Id.ToString() == userId), Reproduce = dto.Reproduce }); db.SaveChanges(); } }
public SummaryDto Summary() { AssertAdmin(); var summary = new SummaryDto(); summary.ongoingGames = GamesService.AllGames.Count; using (var db = new Db.BgDbContext()) { var today = DateTime.Now.Date; summary.playedGamesToday = db.Games.Count(g => g.Started > today); summary.playedGamesTotal = db.Games.Count(); summary.reggedUsers = db.Users.Count(); summary.reggedUsersToday = db.Users.Count(u => u.Registered > today); } return(summary); }
protected void AssertAdmin() { var userId = Request.Headers["user-id"].ToString(); if (string.IsNullOrWhiteSpace(userId)) { throw new UnauthorizedAccessException(); } using (var db = new Db.BgDbContext()) { var user = db.Users.SingleOrDefault(u => u.Id.ToString() == userId); if (user == null || !user.Admin) { throw new UnauthorizedAccessException(); } } }
public PlayedGameListDto AllGames(string afterDate) { AssertAdmin(); DateTime date; if (!DateTime.TryParse(afterDate, out date)) { date = DateTime.Parse("2300-01-01"); } // A trick to prevent loading same game twice. // Will only fail if two games are started the same millisecond which seems impossible. date = date.AddMilliseconds(-1); using (var db = new Db.BgDbContext()) { var playedGames = db.Games.Select(g => new { started = g.Started, black = g.Players.Where(p => p.Color == Db.Color.Black), white = g.Players.Where(p => p.Color == Db.Color.White), winner = g.Winner }).Select(pl => new PlayedGameDto { started = pl.started, black = pl.black.First().User.Name, white = pl.white.First().User.Name, winner = (PlayerColor)pl.winner }) .Where(x => x.started < date) .OrderByDescending(x => x.started) .Take(30); var games = playedGames.ToArray(); return(new PlayedGameListDto { games = games }); } }
public GoldGiftDto RequestGold() { var usId = GetUserId(); using (var db = new Db.BgDbContext()) { var dbUser = db.Users.Single(u => u.Id.ToString() == usId); if (dbUser.Gold < GoldGiftDto.Gift && DateTime.UtcNow > dbUser.LastFreeGold.AddDays(1)) { dbUser.Gold += GoldGiftDto.Gift; dbUser.LastFreeGold = DateTime.UtcNow; db.SaveChanges(); } int unixTimestamp = (int)dbUser.LastFreeGold.Subtract(new DateTime(1970, 1, 1)).TotalSeconds; return(new GoldGiftDto { gold = dbUser.Gold, lastFreeGold = unixTimestamp }); } }
public static int ExcecuteScalar(this Db.BgDbContext db, string commandText, (string name, string value) para)