public Task <Invoice> GetInvoice(string userId, int activityId, InvoiceIncludeFilters invoiceIncludeFilters)
        {
            var queryable = dbContext.Invoices.AsQueryable();

            queryable = queryable.ApplyIncludes(invoiceIncludeFilters);

            return(queryable.FirstOrDefaultAsync(a => a.ActivityId == activityId && a.UserId == userId));
        }
        public Task <List <Invoice> > GetInvoicesPaginated(InvoiceFilter invoiceFilter, InvoiceIncludeFilters invoiceIncludeFilters)
        {
            var queryable = dbContext.Invoices.AsQueryable();

            queryable = queryable.ApplyIncludes(invoiceIncludeFilters);

            queryable = FindIds(invoiceFilter, queryable);

            queryable = queryable.Paginate(invoiceFilter);

            return(queryable.ToListAsync());
        }
        public static IQueryable <Invoice> ApplyIncludes(this IQueryable <Invoice> queryable, InvoiceIncludeFilters invoiceIncludeFilters)
        {
            if (invoiceIncludeFilters.IncludeUser)
            {
                queryable = queryable.Include(x => x.User);
            }
            if (invoiceIncludeFilters.IncludeActivity)
            {
                queryable = queryable.Include(x => x.Activity);
            }

            if (invoiceIncludeFilters.IncludeTypePayments)
            {
                queryable = queryable.Include(x => x.Payments)
                            .ThenInclude(x => x.TypePayment);
            }
            else if (invoiceIncludeFilters.IncludePayments)
            {
                queryable = queryable.Include(x => x.Payments);
            }

            return(queryable);
        }