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); }
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); }
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); }