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 <BankCard> > GetAllCards(string userId) { ServiceValidator.IsInputStringEmptyOrNull(userId); var bankCardQuery = await this.dbContext.BankCards .Where(u => u.UserId == userId && u.IsDeleted == false) .ToListAsync(); return(bankCardQuery); }
public async Task <string> Request(string connections) { ServiceValidator.IsInputStringEmptyOrNull(connections); var response = await client.GetStringAsync(connections); ServiceValidator.IsInputStringEmptyOrNull(response); return(response); }
public async Task <User> EditUserAlias(string alias, string id) { ServiceValidator.IsInputStringEmptyOrNull(alias); var user = await this.context.Users.FirstOrDefaultAsync(us => us.Id == id && !us.IsDeleted); ServiceValidator.ObjectIsNotEqualNull(user); user.Alias = alias; await this.context.SaveChangesAsync(); return(user); }
//TO DO: FIX THIS public async Task <BankCard> GetCard(string cardNumber) { ServiceValidator.IsInputStringEmptyOrNull(cardNumber); //ServiceValidator.ValidateCardNumber(cardNumber); var bankCardQuery = await this.dbContext.BankCards .FirstOrDefaultAsync(c => c.Id == cardNumber && c.IsDeleted == false); ServiceValidator.ObjectIsNotEqualNull(bankCardQuery); return(bankCardQuery); }
public async Task <IEnumerable <Transaction> > RetrieveAllUsersTransaction(string id) { ServiceValidator.IsInputStringEmptyOrNull(id); var transactionsQuery = await this.dbContext .Transactions .Where(t => t.UserId == id && t.IsDeleted != true) .Include(tt => tt.TransactionType) .Include(u => u.User) .OrderByDescending(d => d.CreatedOn) .ToListAsync(); return(transactionsQuery); }
public async Task <Transaction> RetrieveUserTransaction(string id) { ServiceValidator.IsInputStringEmptyOrNull(id); var user = await this.dbContext.Transactions .Include(u => u.User) .Include(tt => tt.TransactionType) .Include(uc => uc.User.Wallet.Currency) .FirstOrDefaultAsync(t => t.Id == id); ServiceValidator.ObjectIsNotEqualNull(user); return(user); }
public async Task <IEnumerable <Transaction> > GetUserTransactions(string userId) { ServiceValidator.IsInputStringEmptyOrNull(userId); var transactionsQuery = await this.dbContext .Transactions .Include(tr => tr.TransactionType) .Where(t => t.UserId == userId && t.IsDeleted != true) .ToListAsync(); ServiceValidator.ValueNotEqualZero(transactionsQuery.Count); return(transactionsQuery); }
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 <double> Deposit(string cardNumber, double amount) { ServiceValidator.IsInputStringEmptyOrNull(cardNumber); ServiceValidator.ValueIsBetween(amount, 0, double.MaxValue); var bankCardQuery = await this.dbContext.BankCards .FirstOrDefaultAsync(c => c.Id == cardNumber && c.IsDeleted == false); ServiceValidator.ObjectIsNotEqualNull(bankCardQuery); ServiceValidator.CheckCardExpirationDate(bankCardQuery.Expiration); bankCardQuery.MoneyAdded += amount; await this.dbContext.SaveChangesAsync(); return(amount); }
public async Task <MonthsTransactionsModelDTO> GetMonthsTransactions(DateTime timePeriod, string transactionType, int monthCount) { ServiceValidator.IsInputStringEmptyOrNull(transactionType); ServiceValidator.ValueIsBetween(monthCount, 1, 12); var dbQuery = await this.dbContext.Transactions .Include(tt => tt.TransactionType) .Where(t => t.TransactionType.Name == transactionType) .ToListAsync(); var resultModel = FiltarByMonth(timePeriod, monthCount, dbQuery); //CHECK FOR MONTH NUMBER !! return(resultModel); }
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); }