コード例 #1
0
        private async ValueTask <IReadOnlyList <TenantSliceGroup <TDoc, TId> > > groupByConjoinedTenancy(IQuerySession querySession, List <IEvent> events)
        {
            var byTenant = events.GroupBy(x => x.TenantId);

            var groupTasks = byTenant.Select(async tGroup =>
            {
                var tenant = new Tenant(tGroup.Key, querySession.Database);

                var tenantSession = querySession.ForTenant(tGroup.Key);
                var group         = new TenantSliceGroup <TDoc, TId>(tenant);

                await GroupEvents(@group, tenantSession, tGroup.ToList()).ConfigureAwait(false);

                return(@group);
            });

            var list = new List <TenantSliceGroup <TDoc, TId> >();

            foreach (var groupTask in groupTasks)
            {
                list.Add(await groupTask.ConfigureAwait(false));
            }

            return(list);
        }
コード例 #2
0
ファイル: custom_slicer.cs プロジェクト: tonykaralis/marten
            public ValueTask <IReadOnlyList <EventSlice <UserGroupsAssignment, Guid> > > SliceInlineActions(IQuerySession querySession, IEnumerable <StreamAction> streams, ITenancy tenancy)
            {
                var allEvents = streams.SelectMany(x => x.Events).ToList();
                var group     = new TenantSliceGroup <UserGroupsAssignment, Guid>(tenancy.Default);

                group.AddEvents <UserRegistered>(@event => @event.UserId, allEvents);
                group.AddEvents <MultipleUsersAssignedToGroup>(@event => @event.UserIds, allEvents);

                return(new(group.Slices.ToList()));
            }
コード例 #3
0
        private async ValueTask <IReadOnlyList <TenantSliceGroup <TDoc, TId> > > groupBySingleTenant(IQuerySession querySession, List <IEvent> events)
        {
            // This path is for *NOT* conjoined multi-tenanted projections, but we have to respect per-database tenancy
            var group = new TenantSliceGroup <TDoc, TId>(querySession, Tenancy.DefaultTenantId);

            await GroupEvents(@group, querySession, events).ConfigureAwait(false);

            return(new List <TenantSliceGroup <TDoc, TId> > {
                @group
            });
        }
コード例 #4
0
ファイル: custom_slicer.cs プロジェクト: tonykaralis/marten
            public ValueTask <IReadOnlyList <TenantSliceGroup <UserGroupsAssignment, Guid> > > SliceAsyncEvents(IQuerySession querySession, List <IEvent> events, ITenancy tenancy)
            {
                var group = new TenantSliceGroup <UserGroupsAssignment, Guid>(tenancy.Default);

                group.AddEvents <UserRegistered>(@event => @event.UserId, events);
                group.AddEvents <MultipleUsersAssignedToGroup>(@event => @event.UserIds, events);

                return(new(new List <TenantSliceGroup <UserGroupsAssignment, Guid> > {
                    group
                }));
            }
コード例 #5
0
ファイル: EventGrouping.cs プロジェクト: ssadevelteam/marten
        public TenantSliceGroup <T, TId> BuildSlices <T>(ITenant tenant, IReadOnlyList <IFanOutRule> rules)
        {
            var slices = buildSlices <T>(tenant);

            var group = new TenantSliceGroup <T, TId>(tenant, slices);

            if (rules.Any())
            {
                group.ApplyFanOutRules(rules);
            }

            return(group);
        }
コード例 #6
0
        private async Task <TenantSliceGroup <TDoc, TId> > groupSingleTenant(ITenant tenant, IQuerySession querySession, IList <IEvent> events)
        {
            var @group = new TenantSliceGroup <TDoc, TId>(tenant);

            foreach (var grouper in _groupers)
            {
                grouper.Apply(events, @group);
            }

            foreach (var lookupGrouper in _lookupGroupers)
            {
                await lookupGrouper.Group(querySession, events, @group);
            }

            return(@group);
        }
コード例 #7
0
        private async Task <TenantSliceGroup <TDoc, TId> > groupSingleTenant(Tenant tenant, IQuerySession querySession, IList <IEvent> events)
        {
            var @group = new TenantSliceGroup <TDoc, TId>(tenant);

            foreach (var grouper in _groupers)
            {
                grouper.Apply(events, @group);
            }

            foreach (var lookupGrouper in _lookupGroupers)
            {
                await lookupGrouper.Group(querySession, events, @group).ConfigureAwait(false);
            }

            group.ApplyFanOutRules(_afterGroupingFanoutRules);

            return(@group);
        }