예제 #1
0
        public async Task <OperationDataResult <int> > GetTransactionsCountAsync(TransactionFiltersModel transactionFiltersModel)
        {
            var transactionsCount = await _applicationContext.Transactions
                                    .Where(transaction =>
                                           (transactionFiltersModel.Statuses == null ? true :
                                            transactionFiltersModel.Statuses.Contains(transaction.Status)) &&
                                           (transactionFiltersModel.Types == null ? true :
                                            transactionFiltersModel.Types.Contains(transaction.Type)))
                                    .AsNoTracking()
                                    .CountAsync();

            return(new OperationDataResult <int>(true, transactionsCount));
        }
예제 #2
0
        public async Task <OperationDataResult <string> > ExportTransactionsAsync(TransactionFiltersModel transactionFiltersModel)
        {
            var builder = new StringBuilder();

            builder.AppendLine("TransactionId,Status,Type,ClientName,Amount");

            await foreach (var transactionChunk in _applicationContext.Transactions.ToChunks(transactionFiltersModel))
            {
                foreach (var transaction in transactionChunk)
                {
                    builder.AppendLine($"{transaction.Id},{transaction.Status},{transaction.Type},{transaction.ClientName},${transaction.Amount}");
                }
            }

            return(new OperationDataResult <string>(true, model: builder.ToString()));
        }
예제 #3
0
        public async Task <IActionResult> GetTransactionsCount([FromQuery] TransactionFiltersModel transactionFiltersModel)
        {
            var result = await _transactionService.GetTransactionsCountAsync(transactionFiltersModel);

            return(result.Success ? (IActionResult)Ok(result.Model) : StatusCode(500));
        }
예제 #4
0
        public async Task <IActionResult> GetExportedTransactions([FromQuery] TransactionFiltersModel transactionFiltersModel)
        {
            var result = await _transactionService.ExportTransactionsAsync(transactionFiltersModel);

            return(result.Success ? File(Encoding.UTF8.GetBytes(result.Model), "text/csv", "data.csv") : (IActionResult)StatusCode(500));
        }
예제 #5
0
        public static async IAsyncEnumerable <List <TransactionModel> > ToChunks(this DbSet <Transaction> transactions, TransactionFiltersModel transactionFiltersModel)
        {
            int count = transactions.Count();

            for (int i = 0; i < count; i += transactionSegmentCount)
            {
                var transactionModels = await transactions
                                        .Where(transaction =>
                                               (transactionFiltersModel.Statuses == null)?true
                                               : transactionFiltersModel.Statuses.Contains(transaction.Status))
                                        .Where(transaction =>
                                               (transactionFiltersModel.Types == null) ? true
                                : transactionFiltersModel.Types.Contains(transaction.Type))
                                        .AsNoTracking()
                                        .OrderBy(transaction => transaction.Id)
                                        .Skip(i)
                                        .Select(transaction => new TransactionModel
                {
                    Id         = transaction.Id,
                    Status     = transaction.Status,
                    Type       = transaction.Type,
                    ClientName = transaction.Client.Name,
                    Amount     = transaction.Amount
                })
                                        .Take(transactionSegmentCount)
                                        .ToListAsync();

                yield return(transactionModels);
            }
        }