Example #1
0
 public NewBet(int id, GameDto game, GroupDto @group, BetDto bet)
 {
     Id    = id;
     Game  = game;
     Group = @group;
     Bet   = bet;
 }
Example #2
0
        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);
        }
Example #3
0
        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));
        }
Example #4
0
        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);
            }
        }
Example #5
0
        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);
        }
Example #6
0
        /// <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());
        }
Example #8
0
        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);
            }
        }
Example #9
0
        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);
        }
Example #11
0
        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);
        }
Example #12
0
 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
     });
 }
Example #13
0
        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);
        }
Example #14
0
        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);
        }
Example #15
0
        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);
        }
Example #16
0
        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));
        }
Example #17
0
        // 我的中奖查询
        // 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);
        }
Example #19
0
        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()));
        }
Example #20
0
        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 }));
            }
        }
Example #22
0
        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);
        }
Example #24
0
        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)
            });
        }
Example #25
0
        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);
        }
Example #26
0
        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));
        }
Example #27
0
        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());
        }
Example #28
0
        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));
        }
Example #29
0
        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));
            }
        }
Example #30
0
        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);
        }