Esempio n. 1
0
        public async Task Execute(IAccountRepository accountRepository)
        {
            var checksum = NumberAccountHelper.GetChecksum(_transferModel.AccountFrom);
            var number   = NumberAccountHelper.GetNumberAccount(_transferModel.AccountFrom);

            var accountFrom = await accountRepository.GetAccountByNumberAndCheckSumAsync(checksum, number);

            accountFrom.Balance -= _transferModel.GetAmount;

            /*
             * przed wysłaniem transferu do innego banku zapisanie stanu konta
             * (operaja może się nie udać, wówczas transfer do innego banku nie zostanie zrealizowany)
             * w przypadku wystąpienia problemów w innym banku operacja zostanie wycofana przez transakcję
             */

            await Save(accountRepository, accountFrom);

            if (NumberAccountHelper.IsAccountInMyBank(_transferModel.AccountTo))
            {
                var transferReceiver = new TransferReceiveOperationCommand(_transferModel);
                await transferReceiver.Execute(accountRepository);
            }
            else
            {
                await SendTransferToAnotherBank();
            }
        }
Esempio n. 2
0
        public async Task Execute(IAccountRepository accountRepository)
        {
            var checksum = NumberAccountHelper.GetChecksum(_transferModel.AccountTo);
            var number   = NumberAccountHelper.GetNumberAccount(_transferModel.AccountTo);

            var accountTo = await accountRepository.GetAccountByNumberAndCheckSumAsync(checksum, number);

            accountTo.Balance += _transferModel.GetAmount;
            await Save(accountRepository, accountTo);
        }
Esempio n. 3
0
        public async Task Execute(IAccountRepository accountRepository)
        {
            var checksum = NumberAccountHelper.GetChecksum(_accountTo);
            var number   = NumberAccountHelper.GetNumberAccount(_accountTo);

            var account = await accountRepository.GetAccountByNumberAndCheckSumAsync(checksum, number);

            var value = (decimal)_amount / 100;

            account.Balance += value;
            await Save(accountRepository, account);
        }
Esempio n. 4
0
        private async Task Save(IAccountRepository accountRepository, RepozytoriumDB.DTO.Account account)
        {
            var operation = new TransferReceiveOperation();

            operation.Title   = _transferModel.Title;
            operation.Amount  = _transferModel.GetAmount;
            operation.Balance = account.Balance;
            operation.Account = account;
            operation.Source  = NumberAccountHelper.ClearNumber(_transferModel.AccountFrom);
            operation.Date    = DateTime.Now;
            accountRepository.OperationRepository.Add(operation);
            await accountRepository.SaveAsync();
        }
Esempio n. 5
0
        public async Task <string> AddAccount(int clientId)
        {
            var account       = new RepozytoriumDB.DTO.Account();
            var idNextAccount = await GetNextIdAccount();

            account.Number   = idNextAccount;
            account.Checksum = NumberAccountHelper.CalculateChecksum(idNextAccount);
            account.Client   = await _accountRepository.ClientRepository.GetByIdAsync(clientId);

            _accountRepository.Add(account);
            await _accountRepository.SaveAsync();

            return(NumberAccountHelper.GetFullNumberAccount(account.Checksum, account.Number));
        }
Esempio n. 6
0
        /// <summary>
        ///     Wysyłanie transferu do innego banku
        /// </summary>
        /// <returns></returns>
        private async Task SendTransferToAnotherBank()
        {
            var idBank = NumberAccountHelper.ExtractIdBank(_transferModel.AccountTo);
            var ip     = BankIdMappingHelper.GetIP(idBank);
            var url    = $"http://{ip}/transfer";

            var username = ConfigurationManager.AppSettings["User"];
            var password = ConfigurationManager.AppSettings["Password"];

            using (var client = new HttpClient())
            {
                var authValue = new AuthenticationHeaderValue("Basic",
                                                              Convert.ToBase64String(Encoding.ASCII.GetBytes($"{username}:{password}")));
                client.DefaultRequestHeaders.Authorization = authValue;

                var content = new StringContent(JsonConvert.SerializeObject(_transferModel), Encoding.UTF8,
                                                "application/json");

                var response = await client.PostAsync(url, content);

                if (response.StatusCode == HttpStatusCode.BadRequest || response.StatusCode == HttpStatusCode.NotFound)
                {
                    var valueResponse = await response.Content.ReadAsStringAsync();

                    var errorDetailWeb = JsonConvert.DeserializeObject <ErrorDetailWeb>(valueResponse);
                    throw new FaultException($"The bank receiver responded : {errorDetailWeb.Error}");
                }
                if (response.StatusCode == HttpStatusCode.Unauthorized)
                {
                    var valueResponse = await response.Content.ReadAsStringAsync();

                    var errorDetailWeb = JsonConvert.DeserializeObject <ErrorDetailWeb>(valueResponse);
                    throw new Exception($"Error authorization in receiver bank. details: {errorDetailWeb.Error}");
                }
                if (response.StatusCode != HttpStatusCode.Created)
                {
                    var valueResponse = await response.Content.ReadAsStringAsync();

                    var errorDetailWeb = JsonConvert.DeserializeObject <ErrorDetailWeb>(valueResponse);
                    throw new Exception(
                              $"Error in receiver bank. details: {errorDetailWeb.Error} code: {response.StatusCode}");
                }
            }
        }
Esempio n. 7
0
        public async Task <IEnumerable <AccountModel> > GetAccounts(string token)
        {
            var accountsDb =
                await _accountRepository.GetAccountsByTokenAsync(token);

            var accounts = new List <AccountModel>();

            foreach (var account in accountsDb)
            {
                var accountModel = new AccountModel();
                accountModel.Number  = NumberAccountHelper.GetFullNumberAccount(account.Checksum, account.Number);
                accountModel.Balance = (double)account.Balance;
                accounts.Add(accountModel);
            }

            if (accounts == null || !accounts.Any())
            {
                throw new FaultException("User hasn't any accounts.");
            }
            return(accounts);
        }
Esempio n. 8
0
        public async Task <HistoryOfAccountModel> GetHistoryOfAccount(string token, string account, int currentPage,
                                                                      int sizePage)
        {
            var checksum = NumberAccountHelper.GetChecksum(account);
            var number   = NumberAccountHelper.GetNumberAccount(account);

            var operationsDb = await _accountRepository.OperationRepository.GetOperationsOfAccountAsync(checksum, number,
                                                                                                        currentPage,
                                                                                                        sizePage);

            var enumerable = operationsDb as IList <BaseOperation> ?? operationsDb.ToList();

            if (operationsDb == null || !enumerable.Any())
            {
                throw new FaultException("Account hasn't any operations.");
            }

            var operations = new List <OperationModel>();

            foreach (var operation in enumerable)
            {
                var operationModel = new OperationModel();
                operationModel.Balance = (double)operation.Balance;
                operationModel.Amount  = (double)operation.Amount;
                operationModel.Date    = operation.Date;
                if (operation is TransferReceiveOperation)
                {
                    operationModel.Name    = (operation as TransferReceiveOperation).Title;
                    operationModel.Details =
                        $"Source account: {NumberAccountHelper.FormatNumber((operation as TransferReceiveOperation).Source)}";
                }
                if (operation is TransferSendOperation)
                {
                    operationModel.Name    = (operation as TransferSendOperation).Title;
                    operationModel.Details =
                        $"Destination account: {NumberAccountHelper.FormatNumber((operation as TransferSendOperation).Destination)}";
                }
                if (operation is PayOutOperation)
                {
                    operationModel.Details = (operation as PayOutOperation).Name;
                }
                if (operation is PayInOperation)
                {
                    operationModel.Details = (operation as PayInOperation).Name;
                }
                if (operation is BankChargeOperation)
                {
                    operationModel.Details = (operation as BankChargeOperation).Name;
                }

                operations.Add(operationModel);
            }

            var result = new HistoryOfAccountModel();

            result.Operations      = operations;
            result.CurrentPage     = currentPage;
            result.CountOfAllPages = await _accountRepository.OperationRepository.GetCountOfAllPagesAsync(checksum,
                                                                                                          number,
                                                                                                          sizePage);

            return(result);
        }