示例#1
0
        private void CreateHostRoleAndUsers()
        {
            //Admin role for host

            var adminRoleForHost = _context.Roles.FirstOrDefault(r => r.TenantId == null && r.Name == StaticRoleNames.Host.Admin);

            if (adminRoleForHost == null)
            {
                adminRoleForHost = _context.Roles.Add(new Role {
                    Name = StaticRoleNames.Host.Admin, DisplayName = StaticRoleNames.Host.Admin, IsStatic = true
                });
                _context.SaveChanges();

                //Grant all tenant permissions
                var permissions = PermissionFinder
                                  .GetAllPermissions(new MahjongBuddyAuthorizationProvider())
                                  .Where(p => p.MultiTenancySides.HasFlag(MultiTenancySides.Host))
                                  .ToList();

                foreach (var permission in permissions)
                {
                    if (!permission.IsGrantedByDefault)
                    {
                        _context.Permissions.Add(
                            new RolePermissionSetting
                        {
                            Name      = permission.Name,
                            IsGranted = true,
                            RoleId    = adminRoleForHost.Id
                        });
                    }
                }

                _context.SaveChanges();
            }

            //Admin user for tenancy host

            var adminUserForHost = _context.Users.FirstOrDefault(u => u.TenantId == null && u.UserName == User.AdminUserName);

            if (adminUserForHost == null)
            {
                adminUserForHost = _context.Users.Add(
                    new User
                {
                    UserName         = User.AdminUserName,
                    Name             = "System",
                    Surname          = "Administrator",
                    EmailAddress     = "*****@*****.**",
                    IsEmailConfirmed = true,
                    Password         = new PasswordHasher().HashPassword(User.DefaultPassword)
                });

                _context.SaveChanges();

                _context.UserRoles.Add(new UserRole(null, adminUserForHost.Id, adminRoleForHost.Id));

                _context.SaveChanges();
            }
        }
        private void CreateRolesAndUsers()
        {
            //Admin role

            var adminRole = _context.Roles.FirstOrDefault(r => r.TenantId == _tenantId && r.Name == StaticRoleNames.Tenants.Admin);

            if (adminRole == null)
            {
                adminRole = _context.Roles.Add(new Role(_tenantId, StaticRoleNames.Tenants.Admin, StaticRoleNames.Tenants.Admin)
                {
                    IsStatic = true
                });
                _context.SaveChanges();

                //Grant all permissions to admin role
                var permissions = PermissionFinder
                                  .GetAllPermissions(new MahjongBuddyAuthorizationProvider())
                                  .Where(p => p.MultiTenancySides.HasFlag(MultiTenancySides.Tenant))
                                  .ToList();

                foreach (var permission in permissions)
                {
                    if (!permission.IsGrantedByDefault)
                    {
                        _context.Permissions.Add(
                            new RolePermissionSetting
                        {
                            TenantId  = _tenantId,
                            Name      = permission.Name,
                            IsGranted = true,
                            RoleId    = adminRole.Id
                        });
                    }
                }

                _context.SaveChanges();
            }

            //admin user

            var adminUser = _context.Users.FirstOrDefault(u => u.TenantId == _tenantId && u.UserName == User.AdminUserName);

            if (adminUser == null)
            {
                adminUser = User.CreateTenantAdminUser(_tenantId, "*****@*****.**", "123qwe");
                adminUser.IsEmailConfirmed = true;
                adminUser.IsActive         = true;

                _context.Users.Add(adminUser);
                _context.SaveChanges();

                //Assign Admin role to admin user
                _context.UserRoles.Add(new UserRole(_tenantId, adminUser.Id, adminRole.Id));
                _context.SaveChanges();
            }
        }
示例#3
0
        private void AddRuleIfNotExists(MjRule rule)
        {
            if (_context.MjRules.Any(r => r.Name == rule.Name))
            {
                return;
            }

            _context.MjRules.Add(rule);
            _context.SaveChanges();
        }
示例#4
0
        public static IEnumerable <RoundTile> SetupForStraight(MahjongBuddyDbContext context, string userId, bool selfPick)
        {
            List <RoundTile> userTiles = new List <RoundTile>();

            var oneCircle = context.RoundTiles.First(t => t.Tile.TileValue == TileValue.One && t.Tile.TileType == TileType.Circle);

            oneCircle.TileSetGroup = TileSetGroup.Chow;
            userTiles.Add(oneCircle);

            var twoCircle = context.RoundTiles.First(t => t.Tile.TileValue == TileValue.Two && t.Tile.TileType == TileType.Circle);

            oneCircle.TileSetGroup = TileSetGroup.Chow;
            userTiles.Add(twoCircle);

            var threeCircle = context.RoundTiles.First(t => t.Tile.TileValue == TileValue.Three && t.Tile.TileType == TileType.Circle);

            oneCircle.TileSetGroup = TileSetGroup.Chow;
            userTiles.Add(threeCircle);

            userTiles.Add(context.RoundTiles.First(t => t.Tile.TileValue == TileValue.Four && t.Tile.TileType == TileType.Circle));
            userTiles.Add(context.RoundTiles.First(t => t.Tile.TileValue == TileValue.Five && t.Tile.TileType == TileType.Circle));
            userTiles.Add(context.RoundTiles.First(t => t.Tile.TileValue == TileValue.Six && t.Tile.TileType == TileType.Circle));

            userTiles.Add(context.RoundTiles.First(t => t.Tile.TileValue == TileValue.One && t.Tile.TileType == TileType.Money));
            userTiles.Add(context.RoundTiles.First(t => t.Tile.TileValue == TileValue.Two && t.Tile.TileType == TileType.Money));
            userTiles.Add(context.RoundTiles.First(t => t.Tile.TileValue == TileValue.Three && t.Tile.TileType == TileType.Money));

            userTiles.Add(context.RoundTiles.First(t => t.Tile.TileValue == TileValue.Four && t.Tile.TileType == TileType.Money));
            userTiles.Add(context.RoundTiles.First(t => t.Tile.TileValue == TileValue.Five && t.Tile.TileType == TileType.Money));
            userTiles.Add(context.RoundTiles.First(t => t.Tile.TileValue == TileValue.Six && t.Tile.TileType == TileType.Money));

            userTiles.Add(context.RoundTiles.First(t => t.Tile.TileValue == TileValue.WindEast));

            foreach (var t in userTiles)
            {
                t.Owner  = userId;
                t.Status = TileStatus.UserActive;
            }

            var lastTile = context.RoundTiles.Last(t => t.Tile.TileValue == TileValue.WindEast);

            if (selfPick)
            {
                lastTile.Owner  = userId;
                lastTile.Status = TileStatus.UserJustPicked;
            }
            else
            {
                lastTile.Owner  = DefaultValue.board;
                lastTile.Status = TileStatus.BoardActive;
            }

            userTiles.Add(lastTile);

            context.SaveChanges();

            return(userTiles);
        }
 public void Build()
 {
     if (!_context.Games.Any())
     {
         var games = CreateGames();
         _context.Games.AddRange(games);
         _context.SaveChanges();
     }
 }
        public void Build()
        {
            if (!_context.Tiles.Any())
            {
                var tiles = CreateTiles();

                _context.Tiles.AddRange(tiles);
                _context.SaveChanges();
            }
        }
示例#7
0
        private void AddSettingIfNotExists(string name, string value, int?tenantId = null)
        {
            if (_context.Settings.Any(s => s.Name == name && s.TenantId == tenantId && s.UserId == null))
            {
                return;
            }

            _context.Settings.Add(new Setting(tenantId, null, name, value));
            _context.SaveChanges();
        }
示例#8
0
        private void AddLanguageIfNotExists(ApplicationLanguage language)
        {
            if (_context.Languages.Any(l => l.TenantId == language.TenantId && l.Name == language.Name))
            {
                return;
            }

            _context.Languages.Add(language);

            _context.SaveChanges();
        }
示例#9
0
        private void CreateUserAndRoles()
        {
            //Default tenant

            var defaultTenant = _context.Tenants.FirstOrDefault(t => t.TenancyName == Tenant.DefaultTenantName);

            if (defaultTenant == null)
            {
                _context.Tenants.Add(new Tenant {
                    TenancyName = Tenant.DefaultTenantName, Name = Tenant.DefaultTenantName
                });
                _context.SaveChanges();
            }
        }
            public async Task <Unit> Handle(Query request, CancellationToken cancellationToken)
            {
                var connection = await _context.Connections.SingleOrDefaultAsync(x => x.Id == request.ConnectionId);

                if (connection != null)
                {
                    if (connection.Connected)
                    {
                        connection.Connected = false;
                        _context.SaveChanges();
                    }
                }
                return(Unit.Value);
            }
        public static RoundTile SetupForPong(MahjongBuddyDbContext context, string userId)
        {
            List <RoundTile> userTiles = new List <RoundTile>();

            var round = context.Rounds.First();

            var oneCircle = round.RoundTiles.First(t => t.Tile.TileValue == TileValue.One && t.Tile.TileType == TileType.Circle);

            oneCircle.TileSetGroup = TileSetGroup.Chow;
            userTiles.Add(oneCircle);

            var twoCircle = round.RoundTiles.First(t => t.Tile.TileValue == TileValue.Two && t.Tile.TileType == TileType.Circle);

            oneCircle.TileSetGroup = TileSetGroup.Chow;
            userTiles.Add(twoCircle);

            var threeCircle = round.RoundTiles.First(t => t.Tile.TileValue == TileValue.Three && t.Tile.TileType == TileType.Circle);

            oneCircle.TileSetGroup = TileSetGroup.Chow;
            userTiles.Add(threeCircle);

            userTiles.Add(round.RoundTiles.First(t => t.Tile.TileValue == TileValue.Four && t.Tile.TileType == TileType.Circle));
            userTiles.Add(round.RoundTiles.First(t => t.Tile.TileValue == TileValue.Five && t.Tile.TileType == TileType.Circle));
            userTiles.Add(round.RoundTiles.First(t => t.Tile.TileValue == TileValue.Six && t.Tile.TileType == TileType.Circle));

            userTiles.Add(round.RoundTiles.First(t => t.Tile.TileValue == TileValue.One && t.Tile.TileType == TileType.Money));
            userTiles.Add(round.RoundTiles.First(t => t.Tile.TileValue == TileValue.Two && t.Tile.TileType == TileType.Money));
            userTiles.Add(round.RoundTiles.First(t => t.Tile.TileValue == TileValue.Three && t.Tile.TileType == TileType.Money));

            userTiles.Add(round.RoundTiles.First(t => t.Tile.TileValue == TileValue.WindEast));
            userTiles.Add(round.RoundTiles.First(t => t.Tile.TileValue == TileValue.WindWest));

            userTiles.AddRange(context.RoundTiles.Where(t => t.Tile.TileValue == TileValue.Six && t.Tile.TileType == TileType.Money).Take(2));

            foreach (var t in userTiles)
            {
                t.Owner  = userId;
                t.Status = TileStatus.UserActive;
            }

            var pongTile = round.RoundTiles.First(t => t.Tile.TileValue == TileValue.Six && t.Tile.TileType == TileType.Money && string.IsNullOrEmpty(t.Owner));

            pongTile.Owner  = "south";
            pongTile.Status = TileStatus.UserActive;

            context.SaveChanges();

            return(pongTile);
        }
示例#12
0
        private void CreateEditions()
        {
            var defaultEdition = _context.Editions.FirstOrDefault(e => e.Name == EditionManager.DefaultEditionName);

            if (defaultEdition == null)
            {
                defaultEdition = new Edition {
                    Name = EditionManager.DefaultEditionName, DisplayName = EditionManager.DefaultEditionName
                };
                _context.Editions.Add(defaultEdition);
                _context.SaveChanges();

                //TODO: Add desired features to the standard edition, if wanted!
            }
        }
        public static RoundTile SetupForWin(MahjongBuddyDbContext context, string userId)
        {
            List <RoundTile> userTiles = new List <RoundTile>();

            var round = context.Rounds.First();

            userTiles.Add(round.RoundTiles.First(t => t.Tile.TileValue == TileValue.One && t.Tile.TileType == TileType.Circle));
            userTiles.Add(round.RoundTiles.First(t => t.Tile.TileValue == TileValue.Two && t.Tile.TileType == TileType.Circle));
            userTiles.Add(round.RoundTiles.First(t => t.Tile.TileValue == TileValue.Three && t.Tile.TileType == TileType.Circle));

            userTiles.Add(round.RoundTiles.First(t => t.Tile.TileValue == TileValue.Four && t.Tile.TileType == TileType.Circle));
            userTiles.Add(round.RoundTiles.First(t => t.Tile.TileValue == TileValue.Five && t.Tile.TileType == TileType.Circle));
            userTiles.Add(round.RoundTiles.First(t => t.Tile.TileValue == TileValue.Six && t.Tile.TileType == TileType.Circle));

            userTiles.Add(round.RoundTiles.First(t => t.Tile.TileValue == TileValue.One && t.Tile.TileType == TileType.Money));
            userTiles.Add(round.RoundTiles.First(t => t.Tile.TileValue == TileValue.Two && t.Tile.TileType == TileType.Money));
            userTiles.Add(round.RoundTiles.First(t => t.Tile.TileValue == TileValue.Three && t.Tile.TileType == TileType.Money));

            userTiles.Add(round.RoundTiles.First(t => t.Tile.TileValue == TileValue.Four && t.Tile.TileType == TileType.Money));
            userTiles.Add(round.RoundTiles.First(t => t.Tile.TileValue == TileValue.Five && t.Tile.TileType == TileType.Money));
            userTiles.Add(round.RoundTiles.First(t => t.Tile.TileValue == TileValue.Six && t.Tile.TileType == TileType.Money));

            var matchingTile = round.RoundTiles.First(t => t.Tile.TileValue == TileValue.WindEast);

            userTiles.Add(matchingTile);

            foreach (var t in userTiles)
            {
                t.Owner  = userId;
                t.Status = TileStatus.UserActive;
            }

            var throwToWinTile = round.RoundTiles.Last(t => t.Tile.TileValue == TileValue.WindEast && t.Id != matchingTile.Id);

            throwToWinTile.Owner  = "south";
            throwToWinTile.Status = TileStatus.UserActive;

            context.SaveChanges();

            return(throwToWinTile);
        }
示例#14
0
            public async Task <GamePlayerDto> Handle(Command request, CancellationToken cancellationToken)
            {
                var game = await _context.Games.FirstOrDefaultAsync(g => g.Code == request.GameCode.ToUpper());

                if (game == null)
                {
                    throw new RestException(HttpStatusCode.NotFound, new { Game = "Could not find game" });
                }

                var user = await _context.Users.SingleOrDefaultAsync(x => x.UserName == request.UserName);

                var gamePlayer = _context.GamePlayers.FirstOrDefault(x => x.GameId == game.Id && x.PlayerId == user.Id);

                if (gamePlayer != null)
                {
                    foreach (var uc in gamePlayer.Connections)
                    {
                        if (uc.Id != request.ConnectionId)
                        {
                            _context.Connections.Remove(uc);
                        }
                    }
                }
                else
                {
                    if (game.Status == GameStatus.Playing || game.GamePlayers.Count == 4)
                    {
                        throw new RestException(HttpStatusCode.BadRequest, new { Game = "Reached max players" });
                    }

                    gamePlayer = new GamePlayer
                    {
                        Game   = game,
                        Player = user,
                        IsHost = false,
                    };
                    _context.GamePlayers.Add(gamePlayer);
                    _context.SaveChanges();
                }

                var existingConnection = _context.Connections.FirstOrDefault(c => c.Id == request.ConnectionId);

                if (existingConnection == null)
                {
                    gamePlayer.Connections.Add(new Connection
                    {
                        Id           = request.ConnectionId,
                        GamePlayerId = gamePlayer.Id,
                        Connected    = true,
                        UserAgent    = request.UserAgent
                    });
                }
                else
                {
                    existingConnection.GamePlayerId = gamePlayer.Id;
                    existingConnection.Connected    = true;
                    existingConnection.UserAgent    = request.UserAgent;
                }

                try
                {
                    await _context.SaveChangesAsync();

                    return(_mapper.Map <GamePlayerDto>(gamePlayer));
                }
                catch (Exception)
                {
                    throw new Exception("Problem joining to game");
                }
            }
        public async Task Build()
        {
            if (!_context.Users.Any())
            {
                var mainPlayer = new Player
                {
                    Id             = "a",
                    DisplayName    = "Tonny",
                    UserName       = "******",
                    Email          = "*****@*****.**",
                    EmailConfirmed = true,
                    DateCreated    = DateTime.Now
                };
                mainPlayer.Photos.Add(new Photo
                {
                    Id     = "ps9p70gkirosjaudenvl",
                    Url    = "https://res.cloudinary.com/mahjongbuddy/image/upload/v1598673581/ps9p70gkirosjaudenvl.jpg",
                    IsMain = true
                });

                var rightPlayer = new Player
                {
                    Id             = "b",
                    DisplayName    = "Mei",
                    UserName       = "******",
                    Email          = "*****@*****.**",
                    EmailConfirmed = true,
                    DateCreated    = DateTime.Now
                };
                rightPlayer.Photos.Add(new Photo
                {
                    Id     = "akrhqqhnjsrsnycub48x",
                    Url    = "https://res.cloudinary.com/mahjongbuddy/image/upload/v1598673644/akrhqqhnjsrsnycub48x.jpg",
                    IsMain = true
                });

                var topPlayer = new Player
                {
                    Id             = "c",
                    DisplayName    = "Peter",
                    UserName       = "******",
                    Email          = "*****@*****.**",
                    EmailConfirmed = true,
                    DateCreated    = DateTime.Now
                };
                topPlayer.Photos.Add(new Photo
                {
                    Id     = "qzqes8q87s5q0acs0tos",
                    Url    = "https://res.cloudinary.com/mahjongbuddy/image/upload/v1598673707/qzqes8q87s5q0acs0tos.jpg",
                    IsMain = true
                });

                var leftPlayer = new Player
                {
                    Id             = "d",
                    DisplayName    = "Jason",
                    UserName       = "******",
                    Email          = "*****@*****.**",
                    EmailConfirmed = true,
                    DateCreated    = DateTime.Now
                };
                leftPlayer.Photos.Add(new Photo
                {
                    Id     = "u6st5f6gbr9enrxbeeqa",
                    Url    = "https://res.cloudinary.com/mahjongbuddy/image/upload/v1598673746/u6st5f6gbr9enrxbeeqa.jpg",
                    IsMain = true
                });

                var users = new List <Player>
                {
                    mainPlayer,
                    leftPlayer,
                    topPlayer,
                    rightPlayer
                };

                foreach (var user in users)
                {
                    await _userManager.CreateAsync(user, "Pa$$w0rd");
                }
                _context.SaveChanges();
            }
        }