コード例 #1
0
        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);
        }
コード例 #2
0
        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));
        }
コード例 #3
0
        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);
        }