public NewBet(int id, GameDto game, GroupDto @group, BetDto bet) { Id = id; Game = game; Group = @group; Bet = bet; }
public async Task ShouldAddBetIfBetExists() { //arrange var memberId = Guid.NewGuid(); var betId = Guid.NewGuid(); var member = new Member(new(memberId), "toto", 0); var bet = Bet.Domain.Bets.Bet.Create(new BetId(betId), new DateTime(2022, 2, 3), "desc1", 10, member, new DateTime(2021, 3, 2)); var betRepository = new InMemoryBetRepository(null, bet.State); var queryBetRepository = new InMemoryBetQueryRepository(new List <BetDto>()); var command = new InsertBetQuerySideNotification(betId, memberId); var handler = new InsertBetQuerySideNotificationHandler(betRepository, queryBetRepository); //act await handler.Handle(command, default); //assert BetDto betInserted = await queryBetRepository.GetByIdAsync(betId); Assert.NotNull(betInserted); Assert.Equal(bet.State.Coins, betInserted.Coins); Assert.Equal(bet.State.Description, betInserted.Description); Assert.Equal(bet.State.EndDate, betInserted.EndDate); Assert.Equal(bet.State.BetId, betInserted.Id); Assert.Equal(bet.State.Creator.Id.Value, betInserted.Creator.Id); }
public void DeleteBet_UserDoesNotHaveBet_ThrowsForbiddenException() { var user = new UserDto() { Id = 1 }; var bet = new BetDto() { Id = 1337, UserId = 1234, CreationDate = DateTime.Now }; //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); mockBetRepository.Setup(b => b.Get(bet.Id)).Returns(bet); 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 Assert.Throws <ForbiddenException>(() => controller.DeleteBet(user.Id, bet.Id)); }
public bool AddBet(BetDto betDto, int basketId) { if (betDto == null || basketId <= 0) { GenerateFaultException("AddBet", "ArgumentException"); } var parameters = new List <Parameter>(); parameters.Add(new Parameter { Type = DbType.Int32, Name = "@RateId", Value = betDto.RateId }); parameters.Add(new Parameter { Type = DbType.Int32, Name = "@MatchId", Value = betDto.MatchId }); parameters.Add(new Parameter { Type = DbType.Int32, Name = "@EventId", Value = betDto.EventId }); parameters.Add(new Parameter { Type = DbType.Int32, Name = "@BasketId", Value = basketId }); var connection = new Connection <BasketDto>(); try { return(connection.GetConnectionUpdate(CommandType.StoredProcedure, "AddBet", parameters)); } catch (SqlException sqlEx) { var exception = new CustomException(); exception.Title = "AddBet"; log.Error(sqlEx.Message); throw new FaultException <CustomException>(exception, sqlEx.Message); } }
public bool AddBet(Bet bet, int basketId) { var betDto = new BetDto(); betDto = convert.ToBetDto(bet); var model = new bool(); using (var client = new ToteService.BetListServiceClient()) { try { client.Open(); model = client.AddBet(betDto, basketId); client.Close(); } catch (FaultException <CustomException> customEx) { log.Error(customEx.Message); return(false); } catch (CommunicationException commEx) { log.Error(commEx.Message); return(false); } } return(model); }
/// <summary> /// Creates a bet. /// </summary> /// <param name="UserId">The user id.</param> /// <param name="roullete_Id">The roulette id.</param> /// <param name="request">The request.</param> /// <returns>Returns succes or fail bet creation message.</returns> public string Bet(string UserId, string roullete_Id, BetDto request) { try { var redisRoulleteId = this.distributedCache.GetString(roullete_Id); if (redisRoulleteId != null) { var dataRoullete = JsonConvert.DeserializeObject<Roullete>(redisRoulleteId); if (dataRoullete.Open == false) { return "This roullet has been closed"; } var funds = request.CashAmount; var number = request.Number; dataRoullete.Users.Add(new User() { UserId = UserId, Funds = funds, Number = number }); dataRoullete.Open = true; var value = JsonConvert.SerializeObject(dataRoullete); this.distributedCache.SetString(roullete_Id, value); return "Your bet was created successfully"; } else { return "This roullet Id it does not exist"; } } catch (StackExchange.Redis.RedisTimeoutException timeout) { return "Error connecting redis: " + timeout; } }
public async Task <IActionResult> InsertBet(BetDto betDto, [FromHeader] int id_user) { var bet = _mapper.Map <Bet>(betDto); bet.id_user = id_user; await _betService.InsertBet(bet); return(Ok()); }
public async Task SaveAsync(BetDto betDto) { var result = _collection.FindOneAndReplace(x => x.Id == betDto.Id, betDto); if (result == null) { await _collection.InsertOneAsync(betDto).ConfigureAwait(false); } }
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 async Task <Unit> Handle(UpdateBetCommand request, CancellationToken cancellationToken) { var bet = await _betRepository.GetByIdAsync(new BetId(request.BetId)) ?? throw new BetUnknownException($"This bet with Id {request.BetId} does not exist"); var dto = new BetDto(bet.State); await _betQueryRepository.SaveAsync(dto); return(Unit.Value); }
public async Task Handle(InsertBetQuerySideNotification request, CancellationToken cancellationToken) { ValidateRequest(request); var bet = await _betRepository.GetByIdAsync(new BetId(request.BetId)).ConfigureAwait(false) ?? throw new BetUnknownException($"BetId: {request.BetId} is unknwon"); var betDto = new BetDto(bet.State); await _queryBetRepository.SaveAsync(betDto); }
public BetDto Convert(Tuple <Player, Bet, string> source, BetDto destination, ResolutionContext context) { return(new BetDto { Username = source.Item1.Username, UserId = source.Item1.Id, Bet = source.Item2?.Amount ?? 0, IsDivided = source.Item2?.IsSplitted ?? false, IsDouble = source.Item2?.IsDouble ?? false }); }
public BetDto ToBetDto(Bet bet) { var betDto = new BetDto { BetId = bet.BetId, EventId = bet.Event.EventId, MatchId = bet.MatchId, RateId = bet.RateId, Status = bet.Status }; return(betDto); }
private bool MakeBet(int rouletteId, int userId, decimal money, bool byNumber, byte number, Entities.Dto.Color color) { RouletteDto rouletteDto = rouletteDtos.Find(r => r.RouletteId == rouletteId); UserDto userDto = userDtos.Find(u => u.UserId == userId); if (rouletteDto == null || rouletteDto.Status == Entities.Dto.Status.CLOSED || userDto == null) { return(false); } BetDto betDto = BetDtoFactory.FactoryMethod(rouletteId, userId, money, byNumber ? BetBy.NUMBER : BetBy.COLOR, number, color); betDtos.Add(betDto); return(true); }
public Bet ToBet(BetDto betDto) { var bet = new Bet { BetId = betDto.BetId, MatchId = betDto.MatchId, RateId = betDto.RateId, Event = new Event() { EventId = betDto.EventId } }; return(bet); }
public IHttpActionResult CreateBet(BetDto betDto) { if (!ModelState.IsValid) { return(BadRequest()); } var bet = Mapper.Map <BetDto, BetImpl>(betDto); _context.Bets.Add(bet); _context.SaveChanges(); betDto.Id = bet.Id; return(Created(new Uri(Request.RequestUri + "/" + bet.Id), betDto)); }
// 我的中奖查询 // GET: /Casino/Bet public ActionResult MyBet(Criteria criteria) { var model = new MyBetDto(); var query = _repo.Query <BetView>(criteria, x => x.UserID == AcnID) .Many <BetView, BetDetail, int>(t => t.ID); var mapper = BetDto.ConfigMapper().CreateMapper(); var list = mapper.Map <IEnumerable <BetDto> >(query.AsEnumerable()); model.Criteria = criteria; model.Data = list; return(View(model)); }
public async Task <Bet> AddBet(BetDto betDto) { var auction = _db.Auctions.FirstOrDefaultAsync(x => x.Id == betDto.AuctionId); var newBet = new Bet() { CurrentBet = betDto.CurrentBet, UserId = betDto.UserId, AuctionId = betDto.AuctionId }; await _db.Bets.AddAsync(newBet); await _db.SaveChangesAsync(); return(newBet); }
public IHttpActionResult UpdateBet(int id, BetDto betDto) { if (!ModelState.IsValid) { throw new HttpResponseException(HttpStatusCode.BadRequest); } var betInDb = _context.Bets.SingleOrDefault(c => c.Id == id); if (betInDb == null) { throw new HttpResponseException(HttpStatusCode.NotFound); } Mapper.Map(betDto, betInDb); return(Ok(_context.SaveChanges())); }
public ActionResult Detail(Guid id) { var model = new DetailDto { Match = MatchDto.Single(id) }; var query = _repo.Query <BetView>(x => x.CasinoItem.MatchGuid == id) .Many <BetView, BetDetail, int>(t => t.ID); var mapper = BetDto.ConfigMapper().CreateMapper(); var list = mapper.Map <IEnumerable <BetDto> >(query.AsEnumerable()); model.Bets = list; return(View(model)); }
public async Task <JsonResult> AddBet(string bet) { BetDto betDto = JsonConvert.DeserializeObject <BetDto>(bet); try { var currentBet = await _auctionService.AddBet(betDto); await _hubContext.Clients.All.SendAsync("Notify", $"Добавлена новая ставка: {betDto.CurrentBet} - {DateTime.Now.ToShortTimeString()}"); return(Json(new { success = true, result = currentBet })); } catch (Exception ex) { return(Json(new { success = false, result = ex.Message })); } }
public async Task GetBet_UserHasBet_ReturnsBetInfoAndOKStatusCode() { var user = new UserDto() { Id = 1 }; var bet = new BetDto() { Id = 1337, UserId = user.Id, DiceSumBet = 10, DiceSumResult = 8, Win = 0, Stake = 20, CreationDate = DateTime.Now }; //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); mockBetRepository.Setup(b => b.Get(bet.Id)).Returns(bet); 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 response = await controller.GetBet(user.Id, bet.Id); //Assert dynamic content = response.Content; Assert.IsTrue(content.Value.CreationDate == bet.CreationDate); Assert.IsTrue(content.Value.Bet == bet.DiceSumBet); Assert.IsTrue(content.Value.Stake == bet.Stake); Assert.IsTrue(content.Value.Win == bet.Win); Assert.IsTrue(content.Value.ActualRoll == bet.DiceSumResult); Assert.IsTrue(response.StatusCode == HttpStatusCode.OK); }
public Task SaveAsync(BetDto betDto) { var dto = _bets.FirstOrDefault(x => x.Id == betDto.Id); if (dto == null) { _bets.Add(betDto); } else { dto.Coins = betDto.Coins; dto.Description = betDto.Description; dto.EndDate = betDto.EndDate; dto.Participants = betDto.Participants; } return(Task.CompletedTask); }
public void PlaceBet(BetDto dto) { var offer = gameQuery.AsGameOfferView(); var bestOffersCoefficients = offer.BestOffers.SelectMany(e => e.Coefficients).Where(e => dto.CoefficientIds.Contains(e.Id)); var allOffersCoefficients = offer.OtherOffers.SelectMany(e => e.Coefficients).Concat(bestOffersCoefficients).Where(e => dto.CoefficientIds.Contains(e.Id)); if (allOffersCoefficients.Count() == 0) { throw new Exception("At least one current offer coefficient needs to be selected."); } if (allOffersCoefficients.GroupBy(x => x.GameId).Any(g => g.Count() > 1)) { throw new Exception("There can only be one coefficient selected per offered game in a bet."); } if (bestOffersCoefficients.Count() > 2) { throw new Exception("There can only be one special offer coefficient selected per bet."); } var totalFunds = walletTransactionQuery.AsTotalFundsView(includeTransactions: false); if (MIN_BET_VALUE >= dto.BetValue || dto.BetValue >= totalFunds.TotalFunds) { throw new Exception("You can only bet if you have sufficient funds (minimum: " + MIN_BET_VALUE + ")"); } var bet = new BetDomainModel { Coefficients = betRepository.GetCoefficientsForBet(dto.CoefficientIds) }; bet.Id = betRepository.Create(bet); var transaction = new WalletTransactionDomainModel(); transaction.AddBetWithValue(bet, dto.BetValue); walletTransactionService.CreateTransactionsForBets(new List <Tuple <BetDomainModel, float> >() { new Tuple <BetDomainModel, float>(bet, dto.BetValue) }); }
public async Task Create(BetDto bet) { var now = DateTime.Now; if (await _context.Register.AnyAsync(r => r.GameId == bet.Id && r.Username == Username)) { throw new ArgumentException("This bet has already been made"); } //Get game var game = await _context.GameOdds.SingleOrDefaultAsync(g => g.Id == bet.Id && now < g.Start); if (game == null) { throw new ArgumentException("Invalid game id"); } //Check amt if (bet.Amt < _options.MinBet || bet.Amt > _options.MaxBet || bet.Amt % _options.Step != 0) { throw new ArgumentException("Bet amount is not valid"); } //Save var newBet = new Register() { GameId = bet.Id, BetAmt = bet.Amt, BetPlayer = bet.Player, Username = Username, SubmitTime = now, RefOdds1 = game.Odds1, RefOdds2 = game.Odds2, RefWin1 = game.Win1, RefWin2 = game.Win2 }; await _context.Register.AddAsync(newBet); await _context.SaveChangesAsync(); await BroadcastPercentage(newBet, 1); _mail.MailNewBet(game, newBet); }
public ActionResult ReturnBet(BetDto model) { if (ModelState.IsValid) { try { var bet = _repo.Single <Bet>(model.ID); if (bet != null) { if (bet.IsWin.HasValue) { throw new Exception("此投注已经发放了奖励"); } if (bet.UserID != AcnID) { throw new Exception("此投注非当前用户的投注"); } bet.ReturnBet(); //退注成功 } TempData["DataUrl"] = $"data-url=/Casino/GameBet/{model.MatchGuid}"; return(RedirectToAction("GameBet", "Casino", new { id = model.MatchGuid })); } catch (Exception ex) { ModelState.AddModelError("Warn", ex.Message); } } else { ModelState.AddModelError("Warn", "请正确填写比赛结果比分"); } model = BetDto.Single(model.ID); return(View(model)); }
public IHttpActionResult Index(NewBetDto newBets) { var bet = _context.Bets.Single( b => b.Id == newBets.Bet.Id); if (bet == null) { return(BadRequest("No Bet")); } var game = _context.Games.Single( g => g.Id == newBets.Game.Id); if (game == null) { return(BadRequest("No Game")); } var group = _context.Groups.Single( g => g.Id == newBets.Group.Id); if (group == null) { return(BadRequest("No Group")); } BetDto betDto = Mapper.Map <BetImpl, BetDto>(bet); GameDto gameDto = Mapper.Map <GameImpl, GameDto>(game); GroupDto groupDto = Mapper.Map <GroupImpl, GroupDto>(group); var newBet = new NewBet { Bet = betDto, Game = gameDto, Group = groupDto }; _context.MakeBets.Add(newBet); _context.SaveChanges(); return(Ok()); }
public BetDto Create(BetDto bet) { var newBet = new Bet() { UserId = bet.UserId, DiceSumBet = bet.DiceSumBet, DiceSumResult = bet.DiceSumResult, Stake = bet.Stake, Win = bet.Win, CreationDate = bet.CreationDate }; using (var db = new DiceGamingDb()) { db.Bets.Add(newBet); db.SaveChanges(); } return(CreateBetDTO(newBet)); }
public async Task <IActionResult> Create([FromBody] BetDto bet) { if (!ModelState.IsValid) { return(BadRequest()); } if (bet.Player != 1 && bet.Player != 2) { return(BadRequest()); } try { await _service.Create(bet); return(Ok()); } catch (ArgumentException ex) { return(BadRequest(ex.Message)); } }
public async Task DeleteBet_UserHasBetAndOneMinuteHaveNotPassed_DeletesBetAndReturnsNoContentStatusCode() { var user = new UserDto() { Id = 1 }; var bet = new BetDto() { Id = 1337, UserId = user.Id, CreationDate = DateTime.Now }; //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); mockBetRepository.Setup(b => b.Get(bet.Id)).Returns(bet); 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 response = await controller.DeleteBet(user.Id, bet.Id); //Assert mockBetRepository.Verify(b => b.Delete(bet.Id)); Assert.IsTrue(response.StatusCode == HttpStatusCode.NoContent); }