コード例 #1
0
        public async Task <Registration> FindRegistrationAsync(
            RegistrationFilter filter,
            RegistrationRetrievalOptions options,
            CancellationToken cancellationToken)
        {
            options ??= RegistrationRetrievalOptions.Default;

            var query = _context.Registrations
                        .WithOptions(options)
                        .AddFilter(filter);

            if (filter.AccessibleOnly)
            {
                query = await _registrationAccessControlService
                        .AddAccessFilterAsync(query, cancellationToken);
            }

            return(await query.FirstOrDefaultAsync(cancellationToken));
        }
コード例 #2
0
        public async Task <Paging <Registration> > ListRegistrationsAsync(
            RegistrationListRequest request,
            RegistrationRetrievalOptions options,
            CancellationToken cancellationToken)
        {
            options ??= RegistrationRetrievalOptions.Default;

            var query = _context.Registrations
                        .WithOptions(options)
                        .AddFilter(request.Filter)
                        .AddOrder(request.OrderBy, request.Descending);

            if (request.Filter.AccessibleOnly)
            {
                query = await _registrationAccessControlService
                        .AddAccessFilterAsync(query, cancellationToken);
            }

            return(await Paging <Registration> .CreateAsync(query, request, cancellationToken));
        }
コード例 #3
0
        public async Task <Registration> GetRegistrationByIdAsync(int id,
                                                                  RegistrationRetrievalOptions options,
                                                                  CancellationToken cancellationToken)
        {
            options ??= RegistrationRetrievalOptions.Default;

            var registration = await _context.Registrations
                               .AsNoTracking()
                               .WithOptions(options)
                               .Where(r => r.RegistrationId == id)
                               .FirstOrDefaultAsync(cancellationToken);

            if (registration == null)
            {
                throw new NotFoundException($"Registration {id} not found.");
            }

            await _registrationAccessControlService
            .CheckRegistrationReadAccessAsync(registration);

            return(registration);
        }
        public static IQueryable <Registration> WithOptions(
            this IQueryable <Registration> query,
            RegistrationRetrievalOptions options)
        {
            if (options == null)
            {
                return(query);
            }

            if (options.IncludeUser)
            {
                query = query.Include(r => r.User);
            }

            if (options.IncludeEventInfo)
            {
                query = query.Include(r => r.EventInfo);
            }

            if (options.IncludeOrders)
            {
                query = query.Include(r => r.Orders)
                        .ThenInclude(o => o.OrderLines);
            }

            if (options.IncludeProducts)
            {
                query = query.Include(r => r.Orders)
                        .ThenInclude(o => o.OrderLines)
                        .ThenInclude(l => l.Product);

                query = query.Include(r => r.Orders)
                        .ThenInclude(o => o.OrderLines)
                        .ThenInclude(l => l.ProductVariant);
            }

            return(query);
        }
コード例 #5
0
        public async Task <Registration> GetRegistrationByIdAsync(int id,
                                                                  RegistrationRetrievalOptions options,
                                                                  CancellationToken cancellationToken)
        {
            options ??= RegistrationRetrievalOptions.Default;

            var registration = await _context.Registrations
                               .WithOptions(options)
                               .FirstOrDefaultAsync(r => r.RegistrationId == id, cancellationToken)
                               ?? throw new NotFoundException($"Registration {id} not found.");

            if (options.ForUpdate)
            {
                await _registrationAccessControlService
                .CheckRegistrationUpdateAccessAsync(registration, cancellationToken);
            }
            else
            {
                await _registrationAccessControlService
                .CheckRegistrationReadAccessAsync(registration, cancellationToken);
            }

            return(registration);
        }
コード例 #6
0
        public static IQueryable <Registration> WithOptions(
            this IQueryable <Registration> query,
            RegistrationRetrievalOptions options)
        {
            if (options == null)
            {
                return(query);
            }

            if (!options.ForUpdate)
            {
                query = query.AsNoTracking();
            }

            if (options.LoadUser)
            {
                query = query.Include(r => r.User);
            }

            if (options.LoadEventInfo)
            {
                query = query.Include(r => r.EventInfo);
            }

            if (options.LoadEventOrganization)
            {
                query = query.Include(r => r.EventInfo)
                        .ThenInclude(e => e.Organization);
            }

            if (options.LoadEventOrganizer)
            {
                query = query.Include(r => r.EventInfo)
                        .ThenInclude(e => e.OrganizerUser);
            }

            if (options.LoadOrders)
            {
                query = query.Include(r => r.Orders)
                        .ThenInclude(o => o.OrderLines);
            }

            if (options.LoadProducts)
            {
                query = query.Include(r => r.Orders)
                        .ThenInclude(o => o.OrderLines)
                        .ThenInclude(l => l.Product);

                query = query.Include(r => r.Orders)
                        .ThenInclude(o => o.OrderLines)
                        .ThenInclude(l => l.ProductVariant);
            }

            if (options.LoadCertificate)
            {
                query = query.Include(r => r.Certificate)
                        .ThenInclude(c => c.IssuingOrganization);

                query = query.Include(r => r.Certificate)
                        .ThenInclude(c => c.IssuingUser);
            }

            return(query);
        }