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); }
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); }
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)); }
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); }