public async Task <Transaction> AddStakeTransaction( string userId, double amountInUserCurrency, string description) { ServiceValidator.IsInputStringEmptyOrNull(userId); ServiceValidator.IsInputStringEmptyOrNull(description); ServiceValidator.CheckStringLength(description, 10, 100); ServiceValidator.ValueIsBetween(amountInUserCurrency, 0, double.MaxValue); var userWin = await this.dbContext.Users .Include(w => w.Wallet) .ThenInclude(w => w.Currency) .FirstOrDefaultAsync(u => u.Id == userId && u.IsDeleted != true); ServiceValidator.ObjectIsNotEqualNull(userWin); var userCurrency = userWin.Wallet.Currency.Name; var bankRates = await this.currencyService.GetRatesAsync(); double normalisedCurrency = 0; if (bankRates.ContainsKey(userCurrency)) { double normalisedUserCurrency = bankRates[userCurrency]; normalisedCurrency = amountInUserCurrency / normalisedUserCurrency; } else { throw new EntityCurrencyNotFoundException("Unknown user currency"); } var newTransaction = new Transaction() { UserId = userId, OriginalAmount = amountInUserCurrency, Description = description, TransactionTypeId = 2, NormalisedAmount = normalisedCurrency }; userWin.Wallet.NormalisedBalance -= normalisedCurrency; userWin.Wallet.DisplayBalance = userWin.Wallet.NormalisedBalance * bankRates[userCurrency]; if (userWin.Wallet.NormalisedBalance < 0) { throw new InsufficientFundsException("Insufficient funds for the requested operation"); } else { await this.dbContext.Transactions.AddAsync(newTransaction); await this.dbContext.SaveChangesAsync(); return(newTransaction); } }
public async Task <Transaction> AddDepositTransaction( string userId, string cardId, double amountInUserCurrency, string description) { ServiceValidator.IsInputStringEmptyOrNull(userId); ServiceValidator.IsInputStringEmptyOrNull(cardId); ServiceValidator.IsInputStringEmptyOrNull(description); ServiceValidator.CheckStringLength(description, 10, 100); ServiceValidator.ValueIsBetween(amountInUserCurrency, 0, double.MaxValue); var userWin = await this.dbContext.Users .Include(w => w.Wallet) .ThenInclude(wall => wall.Currency) .FirstOrDefaultAsync(u => u.Id == userId && u.IsDeleted != true); var bankCard = await this.dbContext.BankCards.FirstOrDefaultAsync(bc => bc.Id == cardId); ServiceValidator.ObjectIsNotEqualNull(userWin); ServiceValidator.ObjectIsNotEqualNull(bankCard); var userCurrency = userWin.Wallet.Currency.Name; var bankRates = await this.currencyService.GetRatesAsync(); double normalisedCurrency = 0; if (bankRates.ContainsKey(userCurrency)) { double normalisedUserCurrency = bankRates[userCurrency]; normalisedCurrency = amountInUserCurrency / normalisedUserCurrency; } else { throw new EntityCurrencyNotFoundException("Unknown user currency"); } var newTransaction = new Transaction() { UserId = userId, OriginalAmount = amountInUserCurrency, Description = description, TransactionTypeId = 3, NormalisedAmount = normalisedCurrency, CardId = bankCard.Id }; userWin.Wallet.NormalisedBalance += normalisedCurrency; userWin.Wallet.DisplayBalance = userWin.Wallet.NormalisedBalance * bankRates[userCurrency]; bankCard.MoneyAdded += amountInUserCurrency; await this.dbContext.Transactions.AddAsync(newTransaction); await this.dbContext.SaveChangesAsync(); return(newTransaction); }
public async Task <IEnumerable <Transaction> > GetTransactionByType(string transactionTypeName) { ServiceValidator.IsInputStringEmptyOrNull(transactionTypeName); ServiceValidator.CheckStringLength(transactionTypeName, 3, 20); var transactionsQuery = await this.dbContext .Transactions .Where(t => t.TransactionType.Name == transactionTypeName && t.IsDeleted != true) .ToListAsync(); ServiceValidator.ValueNotEqualZero(transactionsQuery.Count()); return(transactionsQuery); }
public async Task <BankCard> AddCard(string cardNumber, string userId, DateTime expiration) { ServiceValidator.IsInputStringEmptyOrNull(cardNumber); ServiceValidator.CheckStringLength(cardNumber, 16, 16); ServiceValidator.ValidateCardNumber(cardNumber); ServiceValidator.IsInputStringEmptyOrNull(userId); ServiceValidator.CheckCardExpirationDate(expiration); var bankCard = new BankCard() { CardNumber = cardNumber, UserId = userId, Expiration = expiration, IsDeleted = false, }; await this.dbContext.BankCards.AddAsync(bankCard); await this.dbContext.SaveChangesAsync(); return(bankCard); }