Exemplo n.º 1
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);
        }
Exemplo n.º 2
0
        public IReadOnlyList <TenantSliceGroup <TDoc, Guid> > Slice(IReadOnlyList <IEvent> events, ITenancy tenancy)
        {
            var list     = new List <TenantSliceGroup <TDoc, Guid> >();
            var byTenant = events.GroupBy(x => x.TenantId);

            foreach (var tenantGroup in byTenant)
            {
                var tenant = tenancy[tenantGroup.Key];

                var slices = tenantGroup
                             .GroupBy(x => x.StreamId)
                             .Select(x => new EventSlice <TDoc, Guid>(x.Key, tenant, x));

                var group = new TenantSliceGroup <TDoc, Guid>(tenant, slices);

                list.Add(group);
            }

            return(list);
        }
Exemplo n.º 3
0
        public ValueTask <IReadOnlyList <TenantSliceGroup <TDoc, string> > > Slice(IQuerySession querySession, IReadOnlyList <IEvent> events, ITenancy tenancy)
        {
            var list     = new List <TenantSliceGroup <TDoc, string> >();
            var byTenant = events.GroupBy(x => x.TenantId);

            foreach (var tenantGroup in byTenant)
            {
                var tenant = tenancy[tenantGroup.Key];

                var slices = tenantGroup
                             .GroupBy(x => x.StreamKey)
                             .Select(x => new EventSlice <TDoc, string>(x.Key !, tenant, x));

                var group = new TenantSliceGroup <TDoc, string>(tenant, slices);

                list.Add(group);
            }

            return(new ValueTask <IReadOnlyList <TenantSliceGroup <TDoc, string> > >(list));
        }
Exemplo n.º 4
0
        public async ValueTask <IReadOnlyList <TenantSliceGroup <TDoc, Guid> > > SliceAsyncEvents(IQuerySession querySession,
                                                                                                  List <IEvent> events)
        {
            var list     = new List <TenantSliceGroup <TDoc, Guid> >();
            var byTenant = events.GroupBy(x => x.TenantId);

            foreach (var tenantGroup in byTenant)
            {
                var tenant = new Tenant(tenantGroup.Key, querySession.Database);

                var slices = tenantGroup
                             .GroupBy(x => x.StreamId)
                             .Select(x => new EventSlice <TDoc, Guid>(x.Key, tenant, x));

                var group = new TenantSliceGroup <TDoc, Guid>(tenant, slices);

                list.Add(group);
            }

            return(list);
        }