public async Task <Wallet> GetWallet(WalletQuery query) { await using var dbContext = _dbContextFactory.CreateDbContext(); var queryable = dbContext.Wallets .Where(w => w.UserId == query.UserId && w.WalletId == query.WalletId); if (query.IncludeTransactions) { queryable = queryable.Include(w => w.Transactions).AsNoTracking(); } return(await queryable.FirstOrDefaultAsync()); }
public async Task <Transaction> GetTransaction(TransactionQuery query) { await using var dbContext = _dbContextFactory.CreateDbContext(); IQueryable <Transaction> queryable = dbContext.Transactions.AsQueryable(); if (query.WalletId != null) { var walletQuery = new WalletQuery { WalletId = query.WalletId, IncludeTransactions = true }; if (query.UserId != null) { walletQuery.UserId = query.UserId; } var wallet = await GetWallet(walletQuery); if (wallet == null) { return(null); } queryable = wallet.Transactions.AsQueryable(); } if (query.InvoiceId != null) { queryable = queryable.Where(t => t.InvoiceId == query.InvoiceId); } else if (query.HasInvoiceId) { queryable = queryable.Where(t => t.InvoiceId != null); } if (query.TransactionId != null) { queryable = queryable.Where(t => t.TransactionId == query.TransactionId); } if (query.PaymentRequest != null) { queryable = queryable.Where(t => t.PaymentRequest == query.PaymentRequest); } return(queryable.SingleOrDefault()); }