Example #1
0
        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();
            }
        }
Example #2
0
        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();
     }
 }
Example #4
0
 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));
     }
 }
Example #5
0
        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);
            }
        }
Example #6
0
        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();
            }
        }
Example #7
0
        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();
            }
        }
Example #8
0
        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);
        }
Example #9
0
        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();
                }
            }
        }
Example #10
0
        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
                });
            }
        }
Example #11
0
        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
                });
            }
        }
Example #12
0
 public static int ExcecuteScalar(this Db.BgDbContext db, string commandText, (string name, string value) para)