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); }