public bool CanAPurchaseBeMade(int softCurrency, int warshipPowerLevel, int warshipPowerPoints, out FaultReason?faultReason) { // Console.WriteLine($"{nameof(warshipPowerLevel)} {warshipPowerLevel} {nameof(warshipPowerPoints)} {warshipPowerPoints}"); //Достать цену улучшения WarshipImprovementModel improvementModel = WarshipPowerScale.GetModel(warshipPowerLevel); if (improvementModel == null) { Console.WriteLine("У корабля уже максимальный уровень"); faultReason = FaultReason.MaximumLevelAlreadyReached; return(false); } if (softCurrency < improvementModel.SoftCurrencyCost) { faultReason = FaultReason.InsufficientSoftCurrency; return(false); } if (warshipPowerPoints < improvementModel.PowerPointsCost) { faultReason = FaultReason.InsufficientWarshipPowerPoints; return(false); } faultReason = null; return(true); }
public WarshipImprovementModel GetImprovementModel(int warshipPowerLevel) { WarshipImprovementModel improvementModel = WarshipPowerScale.GetModel(warshipPowerLevel); return(improvementModel); }
public async Task <bool> TryBuyLevel([NotNull] string serviceId, int warshipId) { //Аккаунт существует? AccountDbDto accountDbDto = await accountDbReaderService.ReadAccountAsync(serviceId); if (accountDbDto == null) { throw new Exception("Такого аккаунта не существует"); } //Корабль существует? WarshipDbDto warshipDbDto = accountDbDto.Warships.SingleOrDefault(dto => dto.Id == warshipId); if (warshipDbDto == null) { throw new Exception("Этому аккаунту не принаждлежит этот корабль"); } bool canAPurchaseBeMade = warshipImprovementCostChecker .CanAPurchaseBeMade(accountDbDto.SoftCurrency, warshipDbDto.WarshipPowerLevel, warshipDbDto.WarshipPowerPoints, out var faultReason); if (!canAPurchaseBeMade) { throw new Exception("Невозможно осуществить покупку улучшения для корабля по причине " + faultReason); } WarshipImprovementModel improvementModel = warshipImprovementCostChecker.GetImprovementModel(warshipDbDto.WarshipPowerLevel); Console.WriteLine("текущий wpp " + warshipDbDto.WarshipPowerLevel); //Записать транзакцию Transaction transaction = new Transaction { AccountId = accountDbDto.Id, DateTime = DateTime.UtcNow, TransactionTypeId = TransactionTypeEnum.WarshipImprovement, WasShown = false, Increments = new List <Increment> { new Increment { IncrementTypeId = IncrementTypeEnum.WarshipLevel, Amount = warshipDbDto.WarshipPowerLevel + 1, WarshipId = warshipId } }, Decrements = new List <Decrement> { new Decrement { DecrementTypeId = DecrementTypeEnum.SoftCurrency, Amount = improvementModel.SoftCurrencyCost }, new Decrement { DecrementTypeId = DecrementTypeEnum.WarshipPowerPoints, Amount = improvementModel.PowerPointsCost, WarshipId = warshipDbDto.Id } } }; await dbContext.Transactions.AddAsync(transaction); await dbContext.SaveChangesAsync(); return(true); }