public static IQueryable <Certificate> WithOptions( this IQueryable <Certificate> query, CertificateRetrievalOptions options) { if (!options.ForUpdate) { query = query.AsNoTracking(); } if (options.LoadIssuingOrganization) { query = query.Include(c => c.IssuingOrganization); } if (options.LoadIssuingUser) { query = query.Include(c => c.IssuingUser); } if (options.LoadRecipientUser) { query = query.Include(c => c.RecipientUser); } return(query); }
public async Task <Paging <Certificate> > ListCertificatesAsync( CertificateListRequest request, CertificateRetrievalOptions options = default, CancellationToken cancellationToken = default) { var query = _context.Certificates .WithOptions(options ?? new CertificateRetrievalOptions()) .AddFilter(request.Filter, _context) .AddOrder(request.ListOrder, request.Descending); // TODO: add accessibility filter! return(await Paging <Certificate> .CreateAsync(query, request, cancellationToken)); }
public async Task <Certificate> GetCertificateByIdAsync(int id, CertificateRetrievalOptions options = default, CancellationToken cancellationToken = default) { options ??= new CertificateRetrievalOptions(); var certificate = await _context.Certificates .WithOptions(options) .SingleOrDefaultAsync(c => c.CertificateId == id, cancellationToken) ?? throw new NotFoundException($"Certificate {id} not found"); if (options.ForUpdate) { await _certificateAccessControlService .CheckCertificateUpdateAccessAsync(certificate, cancellationToken); } else { await _certificateAccessControlService .CheckCertificateReadAccessAsync(certificate, cancellationToken); } return(certificate); }