Example #1
0
        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);
            }
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }
Example #4
0
        public async Task <string> Request(string connections)
        {
            ServiceValidator.IsInputStringEmptyOrNull(connections);

            var response = await client.GetStringAsync(connections);

            ServiceValidator.IsInputStringEmptyOrNull(response);

            return(response);
        }
Example #5
0
        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);
        }
Example #6
0
        //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);
        }
Example #7
0
        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);
        }
Example #8
0
        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);
        }
Example #9
0
        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);
        }
Example #10
0
        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);
        }
Example #11
0
        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);
        }
Example #12
0
        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);
        }
Example #13
0
        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);
        }