Esempio n. 1
0
        public async Task <bool> SaveGoldInMinersPocketAsync(Guid minerId, int quantity)
        {
            FaultyService.ThrowRandomException(3);
            var miner = await this.GetAsync(minerId);

            if (miner != null)
            {
                if (miner.IsLogged)
                {
                    if (LedgerChecker.LastQuantityOfGoldDiggedByMiner.ContainsKey(minerId) && LedgerChecker.LastQuantityOfGoldDiggedByMiner[minerId] == quantity)
                    {
                        await this.iMinerRepository.SaveGoldAsync(minerId, quantity);

                        LedgerChecker.LastQuantityOfGoldDiggedByMiner[minerId] = 0;
                        return(true);
                    }
                    else
                    {
                        throw new TryingToStealException($"Miner {minerId} is trying to cheat, next time you will be dicualified");
                    }
                }
                throw new UnauthorizedException();
            }

            return(false);
        }
Esempio n. 2
0
        public async Task <bool> SignUpAsync(Guid minerId)
        {
            FaultyService.ThrowRandomException(2);

            var miner = await this.GetAsync(minerId);

            if (miner != null && !miner.IsLogged)
            {
                miner.IsLogged = true;
                return(await this.iMinerRepository.UpdateAsync(miner));
            }
            return(false);
        }
Esempio n. 3
0
        public async Task <Guid> InsertAsync(string name)
        {
            FaultyService.ThrowRandomException(5);

            MinerEntity miner = new MinerEntity()
            {
                Name     = name,
                Quantity = 0,
                Handicap = 1,
                IsLogged = false,
            };

            var result = await this.iMinerRepository.InsertAsync(miner);

            return(result);
        }
        public async Task <int> Dig(Guid minerId)
        {
            FaultyService.ThrowRandomException(2);

            int quantity = 0;

            try
            {
                var miner = await this.iMinerAppService.GetAsync(minerId);

                if (miner != null)
                {
                    if (miner.IsLogged)
                    {
                        var random = new Random();
                        quantity = random.Next(10) / miner.Handicap;

                        await iGoldMineRepository.SubstractGold(quantity);

                        if (LedgerChecker.LastQuantityOfGoldDiggedByMiner.ContainsKey(minerId))
                        {
                            LedgerChecker.LastQuantityOfGoldDiggedByMiner[minerId] = quantity;
                        }
                        else
                        {
                            LedgerChecker.LastQuantityOfGoldDiggedByMiner.Add(minerId, quantity);
                        }
                    }
                    else
                    {
                        throw new UnauthorizedException();
                    }
                }
            }
            catch (Exception)
            {
                throw;
            }
            return(quantity);
        }