public async Task <IActionResult> BetAsync([FromBody] BetRequest request) { Logger.LogDebug(nameof(BetAsync)); // Validate model if (!ModelState.IsValid) { return(BadRequest(ModelState)); } // Get Player if exists var player = await _playerRepository.GetAsync(request.PlayerId).ConfigureAwait(false); // Check Player's Balance if (player.Balance - request.Bet < 0) { return(BadRequest(new BadRequestError($"The Player MAX. Bet Amout is {player.Balance} EUR"))); } // Create new transaction var transaction = new Transaction { PlayerId = player.PlayerId, Bet = request.Bet }; // Persist Transaction await _transactionRepository.AddAsync(transaction).ConfigureAwait(false); // Re-read Player player = await _playerRepository.GetAsync(request.PlayerId).ConfigureAwait(false); return(Ok(player)); }
public BetResponse Bet(string gamblerId, BetRequest betRequest) { try { if (string.IsNullOrEmpty(gamblerId) || betRequest == null) { ErrorMessage = ErrorEnum.ERROR_REQUEST_INCOMPLETE.ToString(); return(null); } if (!betValidation.ValidBetData(gamblerId, betRequest)) { ErrorMessage = betValidation.ErrorMessage; return(null); } int betId = cBet.RegisterBet(gamblerId, betRequest); if (betId == 0) { ErrorMessage = ErrorEnum.ERROR_GAMBLER_ALREADY_BET.ToString(); return(null); } return(cBet.BuilBetResponse(betId, gamblerId)); } catch (Exception ex) { throw ex; } }
public void ReceiveBetAsByteArray(byte[] buffer) { string strMessage = System.Text.Encoding.UTF8.GetString(buffer); BetRequest betRequest = JsonConvert.DeserializeObject <BetRequest>(strMessage); AcceptBet(betRequest); }
public async Task TryBettingWithoutEnoughMoneyAndCheckIfBadRequestReturned() { string userIdString = TestHelper.TestUser.Id.ToString(); // Make a bet // Arrange var betRequest = new BetRequest() { Bet = 12, Stake = TestHelper.TestUser.Money + 10000 }; var json = JsonConvert.SerializeObject(betRequest); var request = TestHelper.GenerateRequestMessage(url: "http://localhost/api/users/" + userIdString + "/bets", method: HttpMethod.Post, token: TestHelper.TestLogin.Token, json: json); // Act var response = await TestHelper.Client.SendAsync(request); // Assert Assert.IsTrue(response.StatusCode == HttpStatusCode.BadRequest); }
public void Bet_NotEnoughMoney_ThrowsBadRequestException() { var user = new UserDto() { Id = 1, Money = 1234 }; //Arrange Mock <IUserRepository> mockUserRepository = new Mock <IUserRepository>(); Mock <ILoginRepository> mockLoginRepository = new Mock <ILoginRepository>(); Mock <IBetRepository> mockBetRepository = new Mock <IBetRepository>(); mockLoginRepository.Setup(l => l.HasUserAndToken(user.Id, It.IsAny <string>())).Returns(true); mockUserRepository.Setup(u => u.Get(user.Id)).Returns(user); var controller = new BetController(mockUserRepository.Object, mockLoginRepository.Object, mockBetRepository.Object); var requestMessage = new HttpRequestMessage(); requestMessage.Headers.Add("DiceGaming-Token", "token"); controller.Request = requestMessage; controller.Configuration = new HttpConfiguration(); //Act / Assert var betRequest = new BetRequest() { Bet = 10, Stake = user.Money + 1000 }; Assert.Throws <BadRequestException>(() => controller.Bet(user.Id, betRequest)); }
public HttpResponseMessage PlaceBet(int id, [FromBody] BetRequest bet) { User user = _repository.Get(id); Bet userBet = new Bet { UserId = bet.UserId, BetId = Bet.IdCounter, Stake = bet.Stake, DiceSum = bet.Sum, TimeStamp = DateTime.Now }; userBet.RollDice(); if (user.BetHistory != null) { user.BetHistory.Add(userBet); } else { user.BetHistory = new List <Bet> { userBet }; } Bet.IdCounter++; _repository.Update(user); return(Request.CreateResponse(HttpStatusCode.OK, userBet)); }
public async Task <Response> AddBet(BetRequest bet) { Response response = new Response(); try { var roulette = await RouletteAdapter.GetRoulette(bet.RouletteId.Value); if (roulette != null && roulette.Status) { Random rnd = new Random(); bet.Id = rnd.Next(); await BetAdapter.SetBet(bet); response.StatusCode = HttpStatusCode.OK.GetHashCode(); response.Data = bet.GetBetResponse(); } else { response.StatusCode = HttpStatusCode.Forbidden.GetHashCode(); response.Errors.Add(new Entities.Utils.Error(response.StatusCode.ToString(), "RouletteId not is valid")); } } catch (Exception ex) { response.StatusCode = HttpStatusCode.InternalServerError.GetHashCode(); response.Errors.Add(new Entities.Utils.Error(response.StatusCode.ToString(), ex.Message)); } return(response); }
public async Task Bet_EnoughMoney_CreatesBetAndReturnsBetInfoAndOKStatusCode() { var user = new UserDto() { Id = 1, Money = 1234 }; int diceSumResult = 0; //Arrange Mock <IUserRepository> mockUserRepository = new Mock <IUserRepository>(); Mock <ILoginRepository> mockLoginRepository = new Mock <ILoginRepository>(); Mock <IBetRepository> mockBetRepository = new Mock <IBetRepository>(); mockLoginRepository.Setup(l => l.HasUserAndToken(user.Id, It.IsAny <string>())).Returns(true); mockUserRepository.Setup(u => u.Get(user.Id)).Returns(user); mockBetRepository.Setup(b => b.Create(It.IsAny <BetDto>())).Returns <BetDto>(x => { x.Id = 1; // set bet Id to 1 diceSumResult = x.DiceSumResult; // save result of dice throw. Used in assertion of win amount return(x); }); var controller = new BetController(mockUserRepository.Object, mockLoginRepository.Object, mockBetRepository.Object); var requestMessage = new HttpRequestMessage(); requestMessage.Headers.Add("DiceGaming-Token", "token"); controller.Request = requestMessage; controller.Configuration = new HttpConfiguration(); //Act var betRequest = new BetRequest() { Bet = 10, Stake = 200 }; var timeBeforeBet = DateTime.Now; var response = await controller.Bet(user.Id, betRequest); var timeAfterBet = DateTime.Now; //Assert dynamic content = response.Content; var win = (decimal)content.Value.Win; mockUserRepository.Verify(u => u.UpdateMoney(user.Id, It.IsAny <decimal>())); Assert.IsTrue(content.Value.BetId == 1); Assert.IsTrue(content.Value.Bet == betRequest.Bet); Assert.IsTrue(content.Value.Stake == betRequest.Stake); Assert.IsTrue(betRequest.Bet == diceSumResult ? win > 0 : win == 0); var timestamp = (DateTime)content.Value.Timestamp; Assert.IsTrue(timeBeforeBet < timestamp); Assert.IsTrue(timestamp < timeAfterBet); Assert.IsTrue(response.StatusCode == HttpStatusCode.Created); }
public async Task <ActionResult <BetRow> > MakeBet(BetRequest request) { IPHostEntry hostEntry = Dns.GetHostEntry(Dns.GetHostName()); IPAddress currentIpAddress = hostEntry.AddressList.FirstOrDefault(address => address.AddressFamily == AddressFamily.InterNetwork); int user = Convert.ToInt32(User.Identity.Name); var result = await _userService.MakeBet(request, user, currentIpAddress.ToString()); return(Ok(result)); }
public Task <HttpResponseMessage> Bet(int userId, [FromBody] BetRequest betRequest) { string token = Request.Headers.GetValues("DiceGaming-Token").FirstOrDefault(); if (!loginRepository.HasUserAndToken(userId, token)) { throw new ForbiddenException(); } int userBet = betRequest.Bet; decimal stake = betRequest.Stake; var user = userRepository.Get(userId); if (user.Money < stake) { throw new BadRequestException("Not enough money in balance!"); } decimal win = 0; int roll = RollDices(); if (roll == userBet) { decimal multiplier = StakeMultiplier(userBet); win = stake * multiplier; win -= win / 10; // for the house } var bet = new BetDto() { UserId = userId, DiceSumBet = userBet, DiceSumResult = roll, 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, Bet = bet.DiceSumBet, Stake = bet.Stake, Win = bet.Win, Timestamp = bet.CreationDate }; return(Task.FromResult(Request.CreateResponse(HttpStatusCode.Created, response))); }
public static Selection[] ParseMultiRaceSelections(BetRequest betRequest, int[] selections) { return(selections.Select(s => new Selection() { MeetingNumber = (ushort)betRequest.MeetingNumber, RaceNumber = (ushort)(s / 100), HorseNumber = (ushort)(s % 100), IsBanker = 0 }).ToArray()); }
public static Selection[] ParseSelections(BetRequest betRequest, int raceNumber, int[] selections, int raceOffset = 0) { return(selections.Select(s => new Selection() { MeetingNumber = (ushort)betRequest.MeetingNumber, RaceNumber = (ushort)(raceNumber + raceOffset), HorseNumber = (ushort)(s > 900 ? s - 900 : s), IsBanker = (byte)(s > 900 ? 1 : 0) }).ToArray()); }
public async Task PlayerBetTest() { var request = new BetRequest { PlayerId = 1, Bet = 100 }; var result = await _httpClientHelper.PostAsync <BetRequest, Player>(BASE_URL + "bet", request).ConfigureAwait(false); Assert.NotNull(result); }
public async Task <ActionResult <BaseResponse <BetResponse> > > Bet(BetRequest request) { BetAppRequest data = new BetAppRequest { bet = request, idUser = Convert.ToInt32(HttpContext.User.FindFirst("idPerson").Value) }; BaseResponse <BetResponse> response = await _rouletteService.Bet(data); if (!string.IsNullOrEmpty(response.message)) { return(BadRequest(response)); } return(Ok(response)); }
public void AcceptBet(BetRequest betRequest) { if (_balance - betRequest.Amount < 0) { SendMessage(new ErrorMessage("You don't have enough money")); return; } _balance -= betRequest.Amount; _betRequest = betRequest; _rouletteSession.Broadcast(new UserMessage(Name, "bet " + betRequest.Amount + "$")); _logger.Info("New bet from " + Name + ": " + JsonConvert.SerializeObject(betRequest)); }
public bool SendBet(BetRequest betRequest, Bets bets) { var rouletteOpen = _rouletteService.GetFirstOpenedRoulette(); if (rouletteOpen == null) { return(false); } bets.RouletteId = rouletteOpen.RouletteId; bets.Roulettes = rouletteOpen; _context.Bets.Add(bets); _context.SaveChanges(); return(true); }
public void HandleScore(int score) { if (_betRequest != null) { if (_betRequest.IsWon(score)) { int prize = _betRequest.Amount * (_betRequest.Rate + 1); _rouletteSession.Broadcast(new UserMessage(Name, "won " + prize + "$", "WON_MESSAGE")); _balance += prize; } _betRequest = null; } SendMessage(new ScoreMessage(score, _balance)); }
public bool ValidBetRequest(BetRequest betRequest) { try { if (betRequest.RouletteId <= 0) { return(false); } switch (betRequest.BetType) { case (int)BetTypeEnum.Number: if (betRequest.BetNumber == null) { return(false); } if (betRequest.BetNumber < (int)RulesBetEnum.MinBetNumber || betRequest.BetNumber > (int)RulesBetEnum.MaxBetNumber) { return(false); } break; case (int)BetTypeEnum.Color: if (betRequest.BetColor == null) { return(false); } if (betRequest.BetColor != (int)ColorBetEnum.Black && betRequest.BetColor != (int)ColorBetEnum.Red) { return(false); } break; default: return(false); } if (betRequest.CreditsBet <= 0 || betRequest.CreditsBet > (decimal)RulesBetEnum.MaxCreditsBet) { return(false); } return(true); } catch (Exception ex) { throw ex; } }
public ActionResult Bet([FromHeader] string gamblerId, [FromBody] BetRequest betRequest) { try { BetResponse objBetResponse = gamblingService.Bet(gamblerId, betRequest); if (objBetResponse == null && !string.IsNullOrEmpty(gamblingService.ErrorMessage)) { return(BadRequest(gamblingService.ErrorMessage)); } return(Ok(objBetResponse)); } catch (Exception ex) { return(StatusCode(500, ex.Message)); } }
public GenericResponse <bool> Bet([FromHeader] Guid userId, [FromBody] BetRequest betRequest) { var bet = new Bet { Id = Guid.NewGuid(), UserId = userId, BetDateTime = DateTime.UtcNow, NumberToBet = betRequest.NumberToBet, AmountToBet = betRequest.AmountToBet, RouletteId = betRequest.RouletteId }; Enum.TryParse(CultureInfo.CurrentCulture.TextInfo.ToTitleCase(betRequest.ColourToBet), out Colour colourToBet); bet.ColourToBet = Enum.IsDefined(typeof(Colour), colourToBet) ? colourToBet : Colour.Undefined; return(BetApplication.SaveABet(bet)); }
private void RunButton_Click(object sender, EventArgs e) { progressBar1.Maximum = Convert.ToInt32(RunTimesValue.Text); progressBar1.Step = 1; progressBar1.Update(); var spinRequest = new SpinRequest(this); spinRequest.Method = Verbs.GET; var pdata = spinRequest.PostData; var betReq = new BetRequest(); var config = new Configurations { Export = export.Checked, gameName = GameValue.Text, TokenKey = KeyValue.Text, TimeStamp = TsValue.Text, currency = currency.Text, multiplier = "1", GameType = comboBox1.SelectedIndex.ToString() }; var betRes = betReq.GetBetsRequest(config); config.RunTimes = Int32.Parse(RunTimesValue.Text); foreach (var bet in betRes) { config.Bet = bet; Console.WriteLine(config.Bet); spinRequest.SRequest(config); } DialogResult dialog = new DialogResult(); dialog = MessageBox.Show("Do you want to close?", "Alert!", MessageBoxButtons.YesNo); if (dialog == DialogResult.Yes) { System.Environment.Exit(1); } }
public Message CreateBet(BetRequest request) { Message message = new Message(); int answer = 0; string remark = ""; int bet = 0; try { string tokenDecoded = System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(request.token)); Open(); command = new SqlCommand("dbo.betTransacction", connection); command.CommandType = CommandType.StoredProcedure; command.Parameters.AddWithValue("@tokenDecoded", tokenDecoded); command.Parameters.AddWithValue("@betNumber", request.number); command.Parameters.AddWithValue("@betColor", request.color.ToUpper()); command.Parameters.AddWithValue("@mount", request.amount); command.Parameters.AddWithValue("@rouletteId", request.rouletteId); reader = command.ExecuteReader(); while (reader.Read()) { answer = reader.GetFieldValue <int>(0); remark = reader.GetFieldValue <string>(1); bet = reader.GetFieldValue <int>(2); } if (answer != 0) { message = new Message("0000", "Transaccion exitosa, " + remark + ", su id de apuesta es: " + bet, null); } else { message = new Message("0023", "Transaccion fallida. " + remark, null); } Close(); } catch (Exception ex) { message = new Message("0022", "Transaccion fallida.", ex); } return(message); }
public static Selection[] ParseSelections(BetRequest betRequest, int raceNumber, string selections) { var ret = new List <Selection>(); switch (betRequest.BetCode) { // multi-race, multi-selection case Enums.BetCode.TRIO: case Enums.BetCode.DOUBLETRIO: case Enums.BetCode.TRIPLETRIO: case Enums.BetCode.SIXUP: var legs = selections.Split('/'); for (var i = 0; i < legs.Length; ++i) { ret.AddRange(ParseSelections(betRequest, raceNumber, Array.ConvertAll(legs[i].Split(','), int.Parse), i)); } break; // multi-race: case Enums.BetCode.SCOOP6: case Enums.BetCode.SUPER7: case Enums.BetCode.JACKPOT: case Enums.BetCode.PLACEPOT: case Enums.BetCode.QUADPOT: case Enums.BetCode.QUADDIE: case Enums.BetCode.TOTEDOUBLE: case Enums.BetCode.TOTETREBLE: case Enums.BetCode.SUPERJACKPOT7: case Enums.BetCode.PLACEPOT7: case Enums.BetCode.SUPERJACKPOT8: case Enums.BetCode.PLACEPOT8: ret.AddRange(ParseMultiRaceSelections(betRequest, Array.ConvertAll(selections.Split(','), int.Parse))); break; default: ret.AddRange(ParseSelections(betRequest, raceNumber, Array.ConvertAll(selections.Split(','), int.Parse))); break; } return(ret.ToArray()); }
private void RunButton_Click(object sender, EventArgs e) { progressBar1.Maximum = Convert.ToInt32(RunTimesValue.Text); progressBar1.Step = 1; progressBar1.Update(); var config1 = new Configurations(); var spinRequest = new SpinRequest(this); var authToken = new AuthenticateToken(); spinRequest.Method = Verbs.GET; var pdata = spinRequest.PostData; var betReq = new BetRequest(); String keysValue = KeyValue.Text; config1.TokenNames = KeyValue.Text.Split(','); string gamesType = comboBox1.SelectedIndex.ToString(); var configs = authToken.AuthTokens(config1).Select(t => { var result = new Configurations(); result.TokenKey = t; result.gameName = GameValue.Text; result.TimeStamp = TsValue.Text; result.multiplier = multiplier.Text; result.Bet = BetValue.Text; result.GameType = gamesType; result.RunTimes = Int32.Parse(RunTimesValue.Text); return(result); }); Parallel.ForEach(configs, (conf, state) => { spinRequest.SRequest(conf); System.Threading.Thread.Sleep(3000); } ); }
public IActionResult CreateBet([FromHeader(Name = "UserId")] String UserId, [FromBody] BetRequest bet) { try { if (!ModelState.IsValid) { return(BadRequest("Model is not valid")); } var jsonResponse = new { bet.Color, bet.Number, created = _rouletteService.CreateBet(bet), }; return(Ok(jsonResponse)); } catch (Exception ex) { return(StatusCode(500, ex.Message)); } }
public void InsertGambling(BetEntity objBet, BetRequest betRequest, string gamblerId) { try { List <GamblingEntity> objGamblings = GetGamblings(); objGamblings.Add(new GamblingEntity { BetId = objBet.Id, GamblerId = gamblerId, CreditsBet = betRequest.CreditsBet, BetType = betRequest.BetType, BetNumber = betRequest.BetNumber, BetColor = betRequest.BetColor, WonBet = null }); redisCache.SetGamblingToRedis(objGamblings); } catch (Exception ex) { throw ex; } }
public Message CreateBet(BetRequest request, [FromHeader] string token) { Message message = new Message(); try { if (request != null) { if (!String.IsNullOrEmpty(token)) { request.token = token; if (!String.IsNullOrEmpty(request.color) && request.amount != 0 && request.rouletteId != 0) { DB db = new DB(); message = db.CreateBet(request); } else { message = new Message("0021", "Ocurrio un error, los campos son requeridos", null); } } else { message = new Message("0020", "Ocurrio un error, se requiere un token para completar la solicitud", null); } } else { message = new Message("0018", "Ocurrio un error, se requiere el cuerpo de la peticion.", null); } } catch (Exception ex) { message = new Message("0017", "Ocurrio un error.", ex); } return(message); }
public async Task <IActionResult> Post(BetRequest request) { Response response = new Response(); if (!ModelState.IsValid) { response.StatusCode = HttpStatusCode.BadRequest.GetHashCode(); } else { try { HttpContext.Request.Headers.TryGetValue("userId", out StringValues userId); if (string.IsNullOrEmpty(userId)) { response.StatusCode = HttpStatusCode.BadRequest.GetHashCode(); response.Errors.Add(new Error(response.StatusCode.ToString(), "Usuario nulo o invalido")); } else if ((request.Color == 0 && request.Number == null) || (request.Color != 0 && request.Number != null)) { response.StatusCode = HttpStatusCode.BadRequest.GetHashCode(); response.Errors.Add(new Error(response.StatusCode.ToString(), "Apuesta invalida, debe apostar por numero o color, en cada apuesta")); } else { request.UserId = userId; response = await BetServices.AddBet(request); } } catch (Exception ex) { response.StatusCode = HttpStatusCode.InternalServerError.GetHashCode(); response.Errors.Add(new Error(response.StatusCode.ToString(), ex.Message)); } } return(GenerateResult(response)); }
public IActionResult Bet([FromHeader(Name = "user-id")] string UserId, [FromRoute(Name = "id")] string id, [FromBody] BetRequest request) { if (!ModelState.IsValid) { return(BadRequest(new { error = true, msg = "Bad Request" })); } try { Roulette roulette = rouletteService.Bet(id, UserId, request.position, request.money); return(Ok(roulette)); } catch (Exception e) { Console.WriteLine(e); return(StatusCode(405)); } }
public int RegisterBet(string gamblerId, BetRequest betRequest) { try { BetEntity objBet; if (betValidation.ValidBetWithRouletteExist(betRequest.RouletteId)) { objBet = betModel.GetBets().Where(b => b.RouletteId == betRequest.RouletteId && b.Status == true).FirstOrDefault(); } else { int betId = 0; List <BetEntity> objBets = betModel.GetBets(); if (objBets.Count > 0) { betId = objBets.Max(b => b.Id) + 1; } else { betId++; } objBet = betModel.CreateBet(betId, betRequest.RouletteId, status: true); } if (gamblingValidation.ValidGamblerAlreadyBetOnGambling(objBet.Id, gamblerId)) { return(0); } gamblingModel.InsertGambling(objBet, betRequest, gamblerId); gamblerModel.UpdateGamblerCredits(gamblerId, gamblerModel.GetOneGambler(gamblerId).Credits - betRequest.CreditsBet); return(objBet.Id); } catch (Exception ex) { throw ex; } }