private async Task AddEmptyBonusPredictionsForUser(UserBetGroup newBetUserGroup)
        {
            var groups = await _dbContext.WorldCupGroups.ToArrayAsync();

            foreach (var group in groups)
            {
                var firstTeamInGroupBonusPrediction = new BonusPrediction()
                {
                    BonusPredictionType = BonusPredictionType.FirstTeamInGroup,
                    UserBetGroup        = newBetUserGroup,
                    WorldCupGroupId     = group.Id
                };
                _dbContext.Add(firstTeamInGroupBonusPrediction);

                var secondTeamInGroupBonusPrediction = new BonusPrediction()
                {
                    BonusPredictionType = BonusPredictionType.SecondTeamInGroup,
                    UserBetGroup        = newBetUserGroup,
                    WorldCupGroupId     = group.Id,
                };
                _dbContext.Add(secondTeamInGroupBonusPrediction);
            }

            var firstTeamInWorldCupBonusPrediction = new BonusPrediction()
            {
                BonusPredictionType = BonusPredictionType.FirstTeamInWorldCup,
                UserBetGroup        = newBetUserGroup,
            };

            _dbContext.Add(firstTeamInWorldCupBonusPrediction);

            var secondTeamInWorldCupBonusPrediction = new BonusPrediction()
            {
                BonusPredictionType = BonusPredictionType.SecondTeamInWorldCup,
                UserBetGroup        = newBetUserGroup,
            };

            _dbContext.Add(secondTeamInWorldCupBonusPrediction);

            var thirdTeamInWorldCupBonusPrediction = new BonusPrediction()
            {
                BonusPredictionType = BonusPredictionType.ThirdTeamInWorldCup,
                UserBetGroup        = newBetUserGroup,
            };

            _dbContext.Add(thirdTeamInWorldCupBonusPrediction);
        }
        public async Task <IActionResult> JoinBetGroup([FromBody] JoinBetGroupCommand command)
        {
            var user = await GetCurrentUser();

            var betGroup = await _dbContext
                           .BetGroups
                           .SingleOrDefaultAsync(q => q.GroupCode == command.GroupCode);

            if (betGroup == null)
            {
                return(NotFound());
            }

            var existingBetUserGroup = await _dbContext
                                       .UserBetGroups.
                                       SingleOrDefaultAsync(q => q.BetGroupId == betGroup.Id && q.UserId == user.Id);

            if (existingBetUserGroup != null)
            {
                return(Ok(new { betGroup.Name, betGroup.Id }));
            }

            var newBetUserGroup = new UserBetGroup()
            {
                BetGroupId = betGroup.Id,
                UserId     = user.Id
            };

            _dbContext.Add(newBetUserGroup);

            await AddEmptyBonusPredictionsForUser(newBetUserGroup);

            await _dbContext.SaveChangesAsync();

            return(Ok(new { betGroup.Name, betGroup.Id }));
        }