Ejemplo n.º 1
0
        public CoinFlipServiceTest()
        {
            _fakedHashService   = A.Fake <IHashService>();
            _fakedRandomService = A.Fake <IRandomService>();
            var fakedRepoServcieFacotry = A.Fake <IRepoServiceFactory>();

            _fakedCoinFlipMatchRepoService = A.Fake <ICoinFlipMatchRepoService>();
            _fakedUserRepoService          = A.Fake <IUserRepoService>();
            _fakedGameModeRepoSerivce      = A.Fake <IGameModeRepoService>();
            _fakedTransactionFactory       = A.Fake <ITransactionFactory>();
            _fakedTransactionWrapper       = A.Fake <ITransactionWrapper>();
            _fakedBetService  = A.Fake <IBetService>();
            _fakedItemService = A.Fake <IItemService>();
            _fakedJackpotSettingRepoService = A.Fake <IJackpotSettingRepo>();
            _fakedMongoDbJackpotRepoService = A.Fake <IMongoJackpotRepoService>();
            _fakedMongoDbPreHashRepoService = A.Fake <IMongoPreHashRepoService>();

            A.CallTo(() => _fakedTransactionFactory.BeginTransaction()).Returns(_fakedTransactionWrapper);
            A.CallTo(() => fakedRepoServcieFacotry.CoinFlipMatchRepoService).Returns(_fakedCoinFlipMatchRepoService);
            A.CallTo(() => fakedRepoServcieFacotry.GameModeRepoService).Returns(_fakedGameModeRepoSerivce);
            A.CallTo(() => fakedRepoServcieFacotry.UserRepoService).Returns(_fakedUserRepoService);
            A.CallTo(() => fakedRepoServcieFacotry.JackpotSettingRepo).Returns(_fakedJackpotSettingRepoService);

            _defaultSetting = new CreateCoinFlipSettingModel
            {
                AllowCsgo = true,
                AllowPubg = false,
                Diff      = 1000,
                MaxItem   = 10,
                MinItem   = 0,
                PreHash   = "ranomdHash"
            };


            _coinFlipService = new CoinFlipService
                               (
                _fakedHashService,
                _fakedRandomService,
                fakedRepoServcieFacotry,
                _fakedTransactionFactory,
                _fakedBetService,
                _fakedItemService,
                _fakedMongoDbJackpotRepoService,
                A.Dummy <ICoinFlipHubConnections>(),
                _fakedMongoDbPreHashRepoService,
                A.Dummy <IDiscordService>()
                               );
            //TODO CHECK ALL DUMMY TEST OBJECTS!
        }
Ejemplo n.º 2
0
        private DatabaseModel.JackpotSetting CreateJackpotSetting(CreateCoinFlipSettingModel setting, decimal totalValueOfItems)
        {
            var factor         = ((setting.Diff / new decimal(100.0)) + 1);
            var maxDiff        = (totalValueOfItems * factor);
            var minDiff        = (totalValueOfItems / factor);
            var jackpotSetting = new DatabaseModel.JackpotSetting
                                 (
                5,
                10 * 1000,
                setting.MaxItem * 2,
                setting.MaxItem,
                setting.MinItem,
                decimal.Round(maxDiff, 2),
                decimal.Round(minDiff, 2),
                10 * 1000,
                setting.AllowCsgo,
                setting.AllowPubg,
                "drafting graph"
                                 );

            return(jackpotSetting);
        }
Ejemplo n.º 3
0
        public async Task <IActionResult> CreateCoinFlipMatch([FromBody] CreateCoinFlipModel model)
        {
            var userSteamId = User.GetSteamId();

            if (!model.Settings.AllowCsgo && !model.Settings.AllowPubg)
            {
                return(BadRequest("Either CSGO or PUBG must be enabled."));
            }

            if (string.IsNullOrEmpty(model.CoinFlipPreHash))
            {
                return(BadRequest("Prehash needs to bet set inorder to create a match."));
            }

//            if (model.Items.Count > model.Settings.MaxItem)
//                return BadRequest("You can't have a lower maxItem limit then you have betted items");
//
//            if (model.Items.Count < model.Settings.MinItem)
//                return BadRequest("You can't have a higher minItem limit then you have betted items");

            if (model.Settings.Diff < 5)
            {
                return(BadRequest("The diff value can't be less than 5%"));
            }

            if (model.Settings.Diff > 10000) //Upper limit is retarded and only sets limits for the users..
            {
                return(BadRequest("The diff value can't be grater than 10000%"));
            }


            var setting = new CreateCoinFlipSettingModel
            {
                AllowCsgo = model.Settings.AllowCsgo,
                AllowPubg = model.Settings.AllowPubg,
                MaxItem   = 10,
                MinItem   = 1,
                Diff      = model.Settings.Diff,
                PreHash   = model.CoinFlipPreHash,
            };

            try
            {
                var coinFlipMatch = await _coinFlipService.CreateMatch(userSteamId, model.IsHead, model.Items, setting);

                return(Ok(coinFlipMatch));
            }
            catch (Exception ex)
            {
                if (
                    ex is GameModeIsNotEnabledException ||
                    ex is ToManyItemsOnBetException ||
                    ex is ToFewItemsOnBetException ||
                    ex is NotAllowedAppIdOnMatchException ||
                    ex is ToMuchValueOnBetException ||
                    ex is ToLittleValueOnBetException ||
                    ex is InvalidItemException
                    )
                {
                    return(BadRequest(ex.Message));
                }

                if (ex is ToOldPreHashException)
                {
                    return(StatusCode(410, "Some error ocured, please try again"));
                }
                if (ex is PreHashNotFoundException)
                {
                    var location  = ControllerContext.HttpContext.Items["location"].ToString();
                    var arguments = ControllerContext.HttpContext.Items["arguments"] as Dictionary <string, object>;
                    _logService.Error(userSteamId, location, ex, arguments);
                    return(StatusCode(404, "Did not found the hash, try again"));
                }

                throw;
            }
        }
Ejemplo n.º 4
0
        public async Task <CoinFlipMatch> CreateMatch
        (
            string creatorSteamId,
            bool creatorIsHead,
            List <AssetAndDescriptionId> assetAndDescriptionIds,
            CreateCoinFlipSettingModel setting
        )
        {
            var user = await _repoServiceFactory.UserRepoService.FindAsync(creatorSteamId);

            if (user == null)
            {
                throw new UserDoesNotExistException($"The user does with steamId {creatorSteamId} not exist.");
            }

            if (assetAndDescriptionIds.Count == 0)
            {
                throw new InvalidBetException("No items selected");
            }

            var items = await _repoServiceFactory.ItemRepoService.FindAsync(assetAndDescriptionIds);

            var totalValueOfItems = await _itemService.GetSumOfItems(items);

            var jackpotSetting      = CreateJackpotSetting(setting, totalValueOfItems);
            var jackpotMatchSetting = jackpotSetting.ToJackpotMatchSetting();

            var itemDescsIds = assetAndDescriptionIds.Select(item => item.DescriptionId).Distinct().ToList();

            var itemDescriptionTask = _repoServiceFactory.ItemDescriptionRepoService.FindAsync(itemDescsIds);
            var gameModeTask        = _repoServiceFactory.GameModeRepoService.Find(GameModeHelper.GetStringFromType(GameModeType.CoinFlip));
            var getPreHashTask      = _preHashRepoService.Find(setting.PreHash, creatorSteamId);

            await Task.WhenAll(gameModeTask, itemDescriptionTask, getPreHashTask);

            if (!gameModeTask.Result.IsEnabled)
            {
                throw new GameModeIsNotEnabledException("The current gamemode CoinFlip is not enabled at the moment.");
            }

            var match = CreateCoinFlipMatch(creatorIsHead, user, gameModeTask.Result, getPreHashTask.Result);


            var insertedMatch = await InsertedMatchAndBetWithTransaction
                                (
                assetAndDescriptionIds,
                match,
                jackpotSetting,
                gameModeTask.Result,
                items,
                user,
                itemDescriptionTask.Result,
                jackpotMatchSetting
                                );

            var mongoDbMatch = await InsertIntoMongoDb(insertedMatch, items, itemDescriptionTask.Result, jackpotMatchSetting, user);

            var coinFlipMatch = new CoinFlipMatch(mongoDbMatch);

            await _coinFlipHubConnections.MatchCreated(coinFlipMatch);

            _discordService.CoinFlipCreateAsync(setting.AllowCsgo, setting.AllowPubg, totalValueOfItems, match.RoundId, user.SteamId);

            return(coinFlipMatch);
        }