public CreateBetResponse MakeBet(CreateBetRequest betRequest, string clientId)
        {
            CreateBetResponse response = new CreateBetResponse();

            var currentRoulette = _redisHelper.FindRoulette(betRequest.RouletteId);

            if (!currentRoulette.IsOpen)
            {
                response.Message = "The roulette is Closed";
                return(response);
            }

            Entities.Bet newBet = new Entities.Bet();

            if (betRequest.TypeofBet == Enums.BetType.Color)
            {
                newBet.Color       = betRequest.Color;
                newBet.NumbertoBet = null;
            }
            else
            {
                newBet.Color       = Enums.BetColor.None;
                newBet.NumbertoBet = betRequest.NumbertoBet;
            }

            newBet.RouletteId = betRequest.RouletteId;
            newBet.Type       = betRequest.TypeofBet;
            newBet.MoneytoBet = betRequest.MoneytoBet;

            _redisHelper.CreateBet(newBet);
            response.Successful = true;
            response.Message    = "Success";

            return(response);
        }
Пример #2
0
        public ApiWrapperResponse <IList <RouletteInfo> > GetRoulettes(CreateBetRequest request)
        {
            LogInfo("Start GetRoulettes");
            ApiWrapperResponse <IList <RouletteInfo> > result = new ApiWrapperResponse <IList <RouletteInfo> >(new List <RouletteInfo>(), 1);

            try {
                var list_of_values      = new List <RouletteInfo>();
                var rouletes            = RouletteModel.GetRoulettes();
                var betboardsdictionary = RouletteModel.GetRoulettesBoards();

                list_of_values = rouletes.Select(roulette => {
                    RouletteInfo info           = new RouletteInfo();
                    info.Roulette               = roulette;
                    List <BetBoard> list_result = null;
                    betboardsdictionary.TryGetValue(roulette.id.ToString(), out list_result);
                    info.BetBoardList = list_result;
                    return(info);
                }).ToList();
                result = new ApiWrapperResponse <IList <RouletteInfo> >(list_of_values, 1);
            }
            catch (Exception ex) {
                result = new ApiWrapperResponse <IList <RouletteInfo> >(1);
                LogException("Error GetRoulettes ", ex);
            }
            LogInfo("End GetRoulettes " + result.ToString());
            return(result);
        }
Пример #3
0
        public async Task GetBetsByEvent()
        {
            var start = DateTime.Now;
            var end   = new DateTime(2015, 1, 25);
            var close = start.AddDays((end - start).TotalDays / 2);

            var response1 = await _accountingService.CreateAccount(new CreateAccountRequest { Email = this.UniqueEmail });

            var response2 = await _accountingService.CreateAccount(new CreateAccountRequest { Email = this.UniqueEmail });

            var response3 = await _accountingService.CreateAccount(new CreateAccountRequest { Email = this.UniqueEmail });

            var response4 = await _accountingService.CreateAccount(new CreateAccountRequest { Email = this.UniqueEmail });

            var response5 = await _accountingService.CreateAccount(new CreateAccountRequest { Email = this.UniqueEmail });

            var response6 = await _accountingService.CreateAccount(new CreateAccountRequest { Email = this.UniqueEmail });

            var ev = new CreateEventRequest
            {
                AccountId = response1.AccountId,
                Title     = "a a 2015",
                ImageUri  = "localhost",
                StartDate = start,
                EndDate   = end,
                CloseDate = close,
                ExpectedEventCondition = "a a a a a 2015",
                EventRelationType      = EventRelationType.MenyVsMeny,
                ArbiterAccountIds      = new[] { response2.AccountId },
                AlgorithmType          = AlgorithmType.Exponential,
                StartRate    = 100,
                LocusRage    = 1,
                EndRate      = 0,
                CurrencyType = CurrencyType.Reputation
            };

            var ceResponse1 = await _eventsService.CreateEvent(ev);

            var req = new CreateBetRequest {
                EventId = ceResponse1.EventId, OutcomesType = OutcomesType.NotHappen
            };

            req.AccountId = response3.AccountId;
            await _betsService.CreateBet(req);

            req.AccountId = response4.AccountId;
            await _betsService.CreateBet(req);

            req.AccountId = response5.AccountId;
            await _betsService.CreateBet(req);

            req.AccountId = response6.AccountId;
            await _betsService.CreateBet(req);

            var response7 = await _betsService.GetBets(new GetBetsRequest { EventId = req.EventId });

            Assert.AreEqual(4, response7.Bets.Count());
        }
Пример #4
0
 public IActionResult CreateBet([FromBody] CreateBetRequest bet, [FromHeader] string clientId)
 {
     if (!string.IsNullOrEmpty(clientId))
     {
         CreateBetResponse response = _betService.MakeBet(bet, clientId);
         return(Ok(response));
     }
     else
     {
         return(BadRequest("You must enter a Client Id"));
     }
 }
Пример #5
0
        public async Task <CreateBetResponse> CreateBet(CreateBetRequest request)
        {
            Account account = await this._repositoryAccount.Get(request.AccountId);

            Event @event = await this._repositoryEvent.Get(request.EventId);

            OutcomesType outcomesType = await this._repositoryOutcomesType.GetBy(v => v.Name == request.OutcomesType);

            Bet bet = await this._betsFactory.CreateBet(account, @event, outcomesType, request.BetAmount);

            return(new CreateBetResponse {
                BetId = bet.Id
            });
        }
Пример #6
0
        public ApiWrapperResponse <string> CreateBet(CreateBetRequest CreateBetRequest)
        {
            LogInfo("Start CreateBet");
            ApiWrapperResponse <string> result = new ApiWrapperResponse <string>("", 1);

            try {
                StringValues player_id = "";
                //this header must be encrypted
                HttpContext.Request.Headers.TryGetValue("PlayerIdentification", out player_id);
                if (StringValues.IsNullOrEmpty(player_id))
                {
                    result = new ApiWrapperResponse <string>(1, "Invalid Request the player header does not exits.");
                }
                else
                {
                    CreateBetRequest.bet.AssingPlayerId(player_id);
                    if (RouletteModel.PlayerHasCredit(CreateBetRequest.bet))
                    {
                        RouletteModel.AddBet(CreateBetRequest.id_roulette, CreateBetRequest.bet);
                    }
                    else
                    {
                        result = new ApiWrapperResponse <string>("Player does not have credit to make the Bet.", 1);
                    }
                }
            }
            catch (BetBoardStateException ex) {
                result = new ApiWrapperResponse <string>(1, ex.Message);
                LogException("Error CreateBet ", ex);
            }
            catch (Exception ex) {
                result = new ApiWrapperResponse <string>(1);
                LogException("Error CreateBet ", ex);
            }
            LogInfo("End CreateBet " + result.ToString());
            return(result);
        }
Пример #7
0
        public async Task TestCalculateCoupleBetRate()
        {
            var start = DateTime.Now;
            var end   = new DateTime(2015, 1, 25);
            var close = start.AddDays((end - start).TotalDays / 2);

            var response1 = await _accountingService.CreateAccount(new CreateAccountRequest { Email = this.UniqueEmail });

            var response2 = await _accountingService.CreateAccount(new CreateAccountRequest { Email = this.UniqueEmail });

            var response3 = await _accountingService.CreateAccount(new CreateAccountRequest { Email = this.UniqueEmail });

            var response4 = await _accountingService.CreateAccount(new CreateAccountRequest { Email = this.UniqueEmail });

            var response5 = await _accountingService.CreateAccount(new CreateAccountRequest { Email = this.UniqueEmail });

            var response6 = await _accountingService.CreateAccount(new CreateAccountRequest { Email = this.UniqueEmail });

            var response7 = await _accountingService.CreateAccount(new CreateAccountRequest { Email = this.UniqueEmail });

            CreateEventResponse response = await _eventsService.CreateEvent(new CreateEventRequest
            {
                AccountId = response1.AccountId,
                Title     = "a a 2015",
                ImageUri  = "localhost",
                StartDate = start,
                EndDate   = end,
                CloseDate = close,
                ExpectedEventCondition = "a a a a a 2015",
                EventRelationType      = EventRelationType.MenyVsMeny,
                ArbiterAccountIds      = new[] { response2.AccountId },
                AlgorithmType          = AlgorithmType.Exponential,
                StartRate    = 100,
                LocusRage    = 1,
                EndRate      = 0,
                CurrencyType = CurrencyType.Reputation
            });

            var createBetRequest = new CreateBetRequest {
                EventId = response.EventId
            };

            var calculateBetRateRequest = new CalculateBetRateRequest {
                BetAmount = 1, EventId = response.EventId
            };

            calculateBetRateRequest.AccountId    = response1.AccountId;
            calculateBetRateRequest.OutcomesType = OutcomesType.Happen;

            var calculateBetRateResponse = await _betsService.CalculateBetRate(calculateBetRateRequest);

            Assert.IsTrue(DateTime.Now > calculateBetRateResponse.CreationDate && DateTime.Now.AddSeconds(-10) < calculateBetRateResponse.CreationDate);
            Assert.AreEqual(0, calculateBetRateResponse.WinValue);
            Assert.IsTrue(0.99 < (double)calculateBetRateResponse.Rate);

            createBetRequest.AccountId    = response1.AccountId;
            createBetRequest.OutcomesType = OutcomesType.Happen;
            var createBetResponse = await _betsService.CreateBet(createBetRequest);

            calculateBetRateRequest.AccountId = response3.AccountId;
            calculateBetRateResponse          = await _betsService.CalculateBetRate(calculateBetRateRequest);

            Assert.AreEqual(0, calculateBetRateResponse.WinValue);
            Assert.IsTrue(0.99 / 2 < (double)calculateBetRateResponse.Rate);

            createBetRequest.AccountId = response3.AccountId;
            createBetResponse          = await _betsService.CreateBet(createBetRequest);

            calculateBetRateRequest.AccountId = response4.AccountId;
            calculateBetRateResponse          = await _betsService.CalculateBetRate(calculateBetRateRequest);

            Assert.AreEqual(0, calculateBetRateResponse.WinValue);
            Assert.IsTrue(0.99 / 3 < (double)calculateBetRateResponse.Rate);

            createBetRequest.AccountId = response4.AccountId;
            createBetResponse          = await _betsService.CreateBet(createBetRequest);

            calculateBetRateRequest.AccountId    = response5.AccountId;
            calculateBetRateRequest.OutcomesType = OutcomesType.NotHappen;

            calculateBetRateResponse = await _betsService.CalculateBetRate(calculateBetRateRequest);

            Assert.AreEqual(3, calculateBetRateResponse.WinValue);
            Assert.IsTrue(0.99 < (double)calculateBetRateResponse.Rate);

            createBetRequest.AccountId    = response5.AccountId;
            createBetRequest.OutcomesType = OutcomesType.NotHappen;
            createBetResponse             = await _betsService.CreateBet(createBetRequest);

            calculateBetRateRequest.AccountId = response6.AccountId;
            calculateBetRateResponse          = await _betsService.CalculateBetRate(calculateBetRateRequest);

            Assert.IsTrue(1.5m > calculateBetRateResponse.WinValue && calculateBetRateResponse.WinValue > 1.49m);
            Assert.IsTrue(0.99 / 2 < (double)calculateBetRateResponse.Rate);

            createBetRequest.AccountId = response6.AccountId;
            createBetResponse          = await _betsService.CreateBet(createBetRequest);

            calculateBetRateRequest.AccountId    = response7.AccountId;
            calculateBetRateRequest.OutcomesType = OutcomesType.Happen;

            calculateBetRateResponse = await _betsService.CalculateBetRate(calculateBetRateRequest);

            Assert.IsTrue(0.5m > calculateBetRateResponse.WinValue && calculateBetRateResponse.WinValue > 0.49m);
            Assert.IsTrue(0.99 / 4 < (double)calculateBetRateResponse.Rate);
        }