private async Task <GoldExpense> TryExpendGoldInternal(GoldExpense expense, bool saveChanges = true) { var character = await _characterRepo.GetCharacterSimpleAsync(expense.CharacterId); if (character == null) { expense.Result = GoldExpenseResult.CharacterNotFound; } else { if (expense.ExpenseRequested < 0) { expense.Result = GoldExpenseResult.BadRequest; } else if (character.Gold < expense.ExpenseRequested) { expense.Result = GoldExpenseResult.NotEnoughResources; } else { expense.Result = GoldExpenseResult.Authorized; character.Gold -= expense.ExpenseRequested; if (saveChanges) { await _characterRepo.SaveChangesAsync(); } } expense.RemainingGold = character.Gold; } return(expense); }
public async Task <GoldExpenseResponseDTO> TryExpendGold(GoldExpenseRequestDTO expenseRequest) { var expense = new GoldExpense(expenseRequest); expense = await TryExpendGoldInternal(expense); return(_mapper.Map <GoldExpenseResponseDTO>(expense)); }