Beispiel #1
0
        public void Bet(string userId, RouletteBetDto rouletteBetDto)
        {
            var roulette = this.GetById(rouletteBetDto.IdRoulette);

            if (roulette.Id != Guid.Empty.ToString() && roulette.Status == StatusEnum.Open)
            {
                roulette.Bets.Add(new Bet
                {
                    CashAmount = rouletteBetDto.CashAmount,
                    Color      = rouletteBetDto.Color,
                    Number     = rouletteBetDto.Number,
                    UserId     = userId
                });
                this.UpdateCache();
            }
        }
        public RouletteBetDto Create(RouletteBetDto bet)
        {
            var newBet = new RouletteBet()
            {
                UserId       = bet.UserId,
                BetValues    = bet.BetValues.ToArray(),
                SpinResult   = bet.SpinResult,
                Stake        = bet.Stake,
                Win          = bet.Win,
                CreationDate = bet.CreationDate
            };

            using (var db = new OnlineCasinoDb())
            {
                db.RouletteBets.Add(newBet);
                db.SaveChanges();
            }

            return(CreateBetDTO(newBet));
        }
        public Task <HttpResponseMessage> Bet(int userId, [FromBody] RouletteBetRequest betRequest)
        {
            string token = Request.Headers.GetValues("OnlineCasino-Token").FirstOrDefault();

            if (!loginRepository.HasUserAndToken(userId, token))
            {
                throw new ForbiddenException();
            }

            int[]   userBets = betRequest.BetValues;
            decimal stake    = betRequest.Stake;

            if (userBets.Length != 1 &&
                userBets.Length != 2 &&
                userBets.Length != 3 &&
                userBets.Length != 4 &&
                userBets.Length != 6 &&
                userBets.Length != 12 &&
                userBets.Length != 18)
            {
                throw new BadRequestException("Bet values count is invalid!");
            }


            var user = userRepository.Get(userId);

            if (user.Money < stake)
            {
                throw new BadRequestException("Not enough money in balance!");
            }

            decimal win  = 0;
            int     spin = SpinWheel();

            if (userBets.Contains(spin))
            {
                int payout = StakePayout(userBets.Length);
                win = stake + (stake * payout);
            }

            var bet = new RouletteBetDto()
            {
                UserId       = userId,
                BetValues    = userBets,
                SpinResult   = spin,
                Stake        = stake,
                Win          = win,
                CreationDate = DateTime.Now
            };

            bet = betRepository.Create(bet);

            user.Money = user.Money - stake + win;

            userRepository.UpdateMoney(user.Id, user.Money);

            var response = new
            {
                BetId      = bet.Id,
                BetValues  = bet.BetValues,
                SpinResult = bet.SpinResult,
                Stake      = bet.Stake,
                Win        = bet.Win,
                Timestamp  = bet.CreationDate
            };

            return(Task.FromResult(Request.CreateResponse(HttpStatusCode.Created, response)));
        }
 public void Bet([FromHeader(Name = "user-id")] string userId, RouletteBetDto rouletteBetDto)
 {
     this.rouletteService.Bet(userId, rouletteBetDto);
 }