Esempio n. 1
0
        public async Task <DepositPaymentTransactionDTO> MakeDepositPaymentTransaction(string uniqueMasterCitizenNumber,
                                                                                       string password,
                                                                                       decimal amount)
        {
            Wallet wallet = await CheckForWallet(uniqueMasterCitizenNumber, password);

            IBankAPI bankAPI = _bankAPIDeterminator.DeterminateBankAPI(wallet.SupportedBank);
            DepositPaymentTransaction depositPaymentTransaction = wallet.MakeDepositTransaction(amount);

            bool successWithdrawal = await bankAPI.Withdraw(uniqueMasterCitizenNumber, wallet.PostalIndexNumber, amount);

            if (!successWithdrawal)
            {
                wallet.DeletePaymentTransaction(depositPaymentTransaction);
                throw new BankAPIException("Bank api - failed to withdrawal");
            }

            await _unitOfWork.PaymentTransactionRepository.Insert(depositPaymentTransaction);

            await _unitOfWork.SaveChangesAsync();

            return(new DepositPaymentTransactionDTO(depositPaymentTransaction));
        }
Esempio n. 2
0
        public async Task <WalletDTO> CreateNewWallet(string uniqueMasterCitizenNumberValue,
                                                      string postalIndexNumber,
                                                      int supportedBankId,
                                                      string firstName,
                                                      string lastName)
        {
            SupportedBank supportedBank = await _unitOfWork.SupportedBankRepository.GetById(supportedBankId);

            if (supportedBank == null)
            {
                throw new ArgumentException($"Supported bank with id {supportedBankId} does not exist");
            }
            IBankAPI bankAPI     = _bankAPIDeterminator.DeterminateBankAPI(supportedBank);
            bool     validStatus = await bankAPI.CheckStatus(uniqueMasterCitizenNumberValue, postalIndexNumber);

            if (!validStatus)
            {
                throw new BankAPIException("Bank api - invalid status");
            }
            Wallet existingWallet = await _unitOfWork.WalletRepository.GetFirstOrDefault(Wallet =>
                                                                                         Wallet.UniqueMasterCitizenNumber.Value == uniqueMasterCitizenNumberValue
                                                                                         );

            if (existingWallet != null)
            {
                throw new ExistingWalletException("Wallet already exist with same UMCN");
            }
            UniqueMasterCitizenNumber uniqueMasterCitizenNumber = new UniqueMasterCitizenNumber(uniqueMasterCitizenNumberValue);

            if (!uniqueMasterCitizenNumber.ValidForPlatform())
            {
                throw new NotValidUniqueMasterCitizenNumberException("Unique master citizen number not valid for platform");
            }
            string walletPassword = PasswordGenerator.WalletPassword();
            Wallet wallet         = new Wallet(uniqueMasterCitizenNumberValue, supportedBank, firstName, lastName, walletPassword, postalIndexNumber);
            await _unitOfWork.WalletRepository.Insert(wallet);

            await _unitOfWork.SaveChangesAsync();

            return(new WalletDTO(wallet));
        }