示例#1
0
        public async Task <BetEntity> Bet(string idRoulette, string userId, BetModel betRquest)
        {
            string         message  = string.Empty;
            RouletteEntity roulette = await _rouletteRepository.GetById(idRoulette);

            message = _utilities.ValidateRoulette(roulette, isbetting: true);
            if (message != "")
            {
                throw new Exception(message);
            }
            message = _utilities.ValidateBetRequest(betRquest);
            if (message != "")
            {
                throw new Exception(message);
            }
            BetEntity bet = new BetEntity()
            {
                BetDate     = DateTime.Now.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'"),
                UserId      = userId,
                BetModel    = betRquest,
                Winner      = false,
                EarnedMoney = 0,
                Roulette    = roulette
            };
            await _betRepository.InsertDocument(bet);

            return(bet);
        }
示例#2
0
 public string ValidateRoulette(RouletteEntity roulette, bool isbetting = false, bool isClosing = false, bool isOpening = false)
 {
     string message = string.Empty;
     if (roulette == null)
     {
         message = "La ruleta no existe.";
     }
     else
     {
         if (roulette.State == "create" && (isbetting || isClosing))
         {
             message = "La ruleta aún no se encuentra abierta.";
         }
         if (roulette.State == "open" && (isOpening))
         {
             message = "La ruleta ya se encuentra abierta.";
         }
         if (roulette.State == "closed" && (isOpening || isbetting || isClosing))
         {
             message = "La ruleta ya fue cerrada.";
         }
     }
     
     return message;
 }
示例#3
0
        private bool RouletteExistsOrOpen(string id)
        {
            bool           result   = false;
            RouletteEntity roulette = _rouletteRepository.GetById(id).Result.Result;

            if (roulette != null && roulette.Open)
            {
                result = true;
            }
            return(result);
        }
        public async Task <bool> PlayByColor(BetByColorEntity bet)
        {
            if (bet.Amount < 1 || bet.Amount > 10000)
            {
                throw new Exception("El monto a apostar debe estar entre 1 y 10,000.");
            }
            RouletteEntity roulette = await GetFromCache(bet.IdRoulette);

            roulette.BetsByColor.Add(bet);
            await SaveToCache(roulette);

            return(true);
        }
示例#5
0
        public async Task <RouletteEntity> Create()
        {
            RouletteEntity roulette = new RouletteEntity()
            {
                State         = "create",
                OpeningDate   = null,
                ClosingDate   = null,
                WinningNumber = -1,
                WinningColor  = ""
            };
            await _rouletteRepository.InsertDocument(roulette);

            return(roulette);
        }
        public async Task <string> Create()
        {
            RouletteEntity roulette = new RouletteEntity()
            {
                Id           = Guid.NewGuid().ToString(),
                IsOpen       = false,
                BetsByNumber = new List <BetByNumberEntity>(),
                BetsByColor  = new List <BetByColorEntity>()
            };

            await SaveToCache(roulette);

            return(roulette.Id);
        }
示例#7
0
        public object CreateRoulette()
        {
            var vInput = new RouletteEntity
            {
                State = Constant.Created,
                Date  = DateTime.UtcNow.ToString("O")
            };
            var vRoulette = _rouletteDal.Create(vInput);
            var vResult   = new
            {
                vRoulette.Id
            };

            return(vResult);
        }
        public async Task <IEnumerable <WinnerDto> > Close(string idRoulette)
        {
            RouletteEntity roulette = await GetFromCache(idRoulette);

            List <WinnerDto> winners = new List <WinnerDto>();

            if (roulette.IsOpen)
            {
                int numberWinner = new Random().Next(0, 36);
                winners = GetWinners(roulette, numberWinner);
            }
            roulette.IsOpen = false;
            await SaveToCache(roulette);

            return(winners);
        }
        public async Task <bool> Open(string idRoulette)
        {
            RouletteEntity roulette = await GetFromCache(idRoulette);

            bool success = false;

            if (!roulette.IsOpen)
            {
                roulette.IsOpen = true;
                await SaveToCache(roulette);

                success = true;
            }

            return(success);
        }
示例#10
0
        public async Task <RouletteEntity> Open(string Id)
        {
            RouletteEntity roulette = await _rouletteRepository.GetById(Id);

            string message = _utilities.ValidateRoulette(roulette, isOpening: true);

            if (message != "")
            {
                throw new Exception(message);
            }
            roulette.OpeningDate = DateTime.Now.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'");
            roulette.State       = "open";
            await _rouletteRepository.UpdateDocument(roulette);

            return(roulette);
        }
示例#11
0
        public async Task <GenericResponseEntity <string> > OpenBet(string id)
        {
            RouletteEntity rouletteUpd = _rouletteRepository.GetById(id).Result.Result;

            if (rouletteUpd != null)
            {
                rouletteUpd.Open     = true;
                rouletteUpd.OpenDate = DateTime.Now;
                return(await _rouletteRepository.UpdateDocument(rouletteUpd));
            }
            GenericResponseEntity <string> response = new GenericResponseEntity <string>()
            {
                Result = "El Id de la ruleta ha actualizar no existe. Por favor verifique el Id"
            };

            return(response);
        }
示例#12
0
        public async Task <IEnumerable <BetEntity> > Close(string id)
        {
            RouletteEntity roulette = await _rouletteRepository.GetById(id);

            string message = _utilities.ValidateRoulette(roulette, isClosing: true);

            if (message != "")
            {
                throw new Exception(message);
            }
            var winningNumber = _utilities.GetWinningNumber();
            var winningColor  = (_utilities.ValidateEvenNumber(winningNumber)) ? "rojo" : "negro";

            roulette.ClosingDate   = DateTime.Now.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'");
            roulette.WinningNumber = winningNumber;
            roulette.WinningColor  = winningColor;
            roulette.State         = "closed";
            await _rouletteRepository.UpdateDocument(roulette);

            var listBet = await _betRepository.GetByFilter(Builders <BetEntity> .Filter.Eq(doc => doc.Roulette.Id, id));

            foreach (var bet in listBet)
            {
                bet.Roulette = roulette;
                if (bet.BetModel.BetType.ToLower() == "color")
                {
                    if (bet.BetModel.BetValue.ToLower() == winningColor)
                    {
                        bet.Winner      = true;
                        bet.EarnedMoney = (bet.BetModel.BetMoney * 1.8);
                    }
                }
                else
                {
                    if (Convert.ToInt32(bet.BetModel.BetValue) == winningNumber)
                    {
                        bet.Winner      = true;
                        bet.EarnedMoney = (bet.BetModel.BetMoney * 5);
                    }
                }
                await _betRepository.UpdateDocument(bet);
            }

            return(listBet);
        }
示例#13
0
        private List <WinnerDto> GetWinners(RouletteEntity roulette, int numberWinner)
        {
            List <WinnerDto> winners     = new List <WinnerDto>();
            string           colorWinner = (numberWinner % 2 == 0) ? "Red" : "Black";
            var winnersByNumber          = roulette.BetsByNumber.Where(x => x.Number == numberWinner).ToList();
            var winnersByColor           = roulette.BetsByColor.Where(x => x.Color == colorWinner).ToList();

            winnersByNumber.ForEach(x => winners.Add(new WinnerDto
            {
                IdUser = x.IdUser,
                Amount = x.Amount * 5
            }));
            winnersByColor.ForEach(x => winners.Add(new WinnerDto
            {
                IdUser = x.IdUser,
                Amount = x.Amount * 1.8
            }));
            return(winners);
        }
        public bool ValidRouletteIsOpen(int id, List <RouletteEntity> objRoulettes)
        {
            try
            {
                RouletteEntity objRoulette = objRoulettes.Where(r => r.Id == id).FirstOrDefault();
                if (objRoulette != null)
                {
                    if (objRoulette.Status)
                    {
                        return(true);
                    }
                }

                return(false);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
示例#15
0
        public async Task <IActionResult> OpenRulette(string id)
        {
            try
            {
                RouletteEntity roulette = await _rouletteService.Open(id);

                if (roulette.State == "open")
                {
                    return(Ok(new { state = "Operación exitosa.", errorMessge = "" }));
                }
                else
                {
                    return(Ok(new { state = "Operación denegada.", errorMessge = "No se abrió la ruleta." }));
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);

                return(Ok(new { state = "Operación denegada.", errorMessge = e.Message }));
            }
        }
示例#16
0
 public RouletteEntity Create(RouletteEntity pObject)
 {
     _roulette.InsertOne(pObject);
     return(pObject);
 }
示例#17
0
 private async Task SaveToCache(RouletteEntity roulette)
 {
     await _distributedCache.SetAsync(roulette.Id, ToByteArray(roulette));
 }
示例#18
0
 private byte[] ToByteArray(RouletteEntity roulette)
 {
     return(JsonSerializer.SerializeToUtf8Bytes(roulette));
 }
示例#19
0
 public void Update(string id, RouletteEntity objIn) => _roulette.ReplaceOne(x => x.Id == id, objIn);
示例#20
0
 public void Remove(RouletteEntity objIn) => _roulette.DeleteOne(x => x.Id == objIn.Id);
示例#21
0
        public async Task <ActionResult <GenericResponseEntity <string> > > Post()
        {
            RouletteEntity roulette = new RouletteEntity();

            return(Ok(await _rouletteGenericRepository.InsertDocument(roulette)));
        }
示例#22
0
        public async Task <IActionResult> NewRulette()
        {
            RouletteEntity roulette = await _rouletteService.Create();

            return(Ok(new { Id = roulette.Id }));
        }