public async Task AddBetToMatch(DatabaseModel.CoinFlip match, CoinFlipBet bet)
        {
            var findFilter   = GetFindFilter().Where(m => m.LookUpId == match.Id);
            var updateFilter = GetUpdateFilter().Push(m => m.Bets, bet);

            await GetCollection().UpdateOneAsync(findFilter, updateFilter);
        }
Example #2
0
        private async Task SendWebSocketEventPlayerJoinedAndInsertCoinFlipBetToMongoDb
        (
            DatabaseModel.CoinFlip coinFlip,
            DatabaseModel.JackpotSetting currentMatchSetting,
            List <DatabaseModel.Bet> bets
        )
        {
            var creatorBet        = bets.First(bet => bet.UserId == coinFlip.CreatorUserId);
            var creatorItemBetted = await _repoServiceFactory.ItemBettedRepoService.FindAsync(creatorBet);

            var creatorValueBet = creatorItemBetted.Sum(betted => betted.Value);

            var newBet     = bets.First(bet => bet.UserId != coinFlip.CreatorUserId);
            var itemBetted = await _repoServiceFactory.ItemBettedRepoService.FindAsync(newBet);

            var valueBet = itemBetted.Sum(betted => betted.Value);

            var dbUser = await _repoServiceFactory.UserRepoService.FindAsync(newBet.UserId);

            var user = new User
            {
                ImageUrl = dbUser.ImageUrl,
                Name     = dbUser.Name,
                SteamId  = dbUser.SteamId
            };

            var unquieItemDescriptions = itemBetted.Select(item => item.DescriptionId).Distinct().ToList();

            var itemDescriptions = await _repoServiceFactory.ItemDescriptionRepoService.FindAsync(unquieItemDescriptions);

            var items = new List <Item>();

            foreach (var itemDescription in itemDescriptions)
            {
                foreach (var betted in itemBetted)
                {
                    if (betted.DescriptionId != itemDescription.Id)
                    {
                        continue;
                    }

                    items.Add(new Item
                    {
                        AssetId       = betted.AssetId,
                        DescriptionId = itemDescription.Id,
                        IconUrl       = itemDescription.ImageUrl,
                        Name          = itemDescription.Name,
                        Value         = itemDescription.Value,
                        TookAsRake    = false,
                        Owner         = user,
                    });
                }
            }

            var coinflipBet = new CoinFlipBet
            {
                IsHead   = !coinFlip.CreatorIsHead,
                Items    = items,
                User     = user,
                DateTime = newBet.Created,
                Tickets  = new RoundTicket
                {
                    Start = ((int)(creatorValueBet * 100)) + 1,
                    End   = (int)((valueBet + creatorValueBet) * 100)
                }
            };

            var websocketData = new TimerStartedWebsocketModel
            {
                RoundId = coinFlip.RoundId,
                Bet     = coinflipBet,
                DraftingTimeInMilliSec = currentMatchSetting.DraftingTimeInMilliSec
            };
            await _jackpotRepoService.AddBetToMatch(coinFlip, coinflipBet);

            await _coinFlipHubConnections.MatchTimmerStarted(websocketData);

            _discordService.CoinFlipJoinAsync(creatorValueBet, coinFlip.RoundId, user.SteamId);
        }