示例#1
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);
        }