IReadOnlyList <IAsyncProjectionShard> IProjectionSource.AsyncProjectionShards(IDocumentStore store, ITenancy tenancy) { // TODO -- support sharding // TODO -- use event filters!!! var runtime = BuildRuntime((DocumentStore)store); var shardType = typeof(AggregationShard <,>).MakeGenericType(typeof(T), _aggregateMapping.IdType); // TODO -- allow users to configure the options????? var shard = (IAsyncProjectionShard)Activator.CreateInstance(shardType, ProjectionName, new ISqlFragment[0], runtime, store, new AsyncOptions()); return(new List <IAsyncProjectionShard> { shard }); }
public static string TvpFor(this ITenancy me, int tobeRoleID) { return(me?.To(x => at.Tvp.Quad.Join(x.PID, x.AID, x.ID, rectify(tobeRoleID))).Ensure()); int rectify(int roleID) => me.Roles.Contains(roleID) ? roleID : -1; }
public AggregationRuntime(IDocumentStore store, IAggregateProjection projection, IEventSlicer <TDoc, TId> slicer, ITenancy tenancy, IDocumentStorage <TDoc, TId> storage) { Projection = projection; Slicer = slicer; Storage = storage; Tenancy = tenancy; _store = store; }
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 static string TvpFor(this ITenancy me, Enum role) => TvpFor(me, role.ToInt32());
public IReadOnlyList <EventSlice <TDoc, Guid> > Slice(IEnumerable <StreamAction> streams, ITenancy tenancy) { return(streams.Select(s => { var tenant = tenancy[s.TenantId]; return new EventSlice <TDoc, Guid>(s.Id, tenant, s.Events); }).ToList()); }
public CrossStreamAggregationRuntime(IDocumentStore store, IAggregateProjection projection, IEventSlicer <TDoc, TId> slicer, ITenancy tenancy, IDocumentStorage <TDoc, TId> storage) : base(store, projection, slicer, tenancy, storage) { }
public CompositeDocumentCleaner(ITenancy tenancy) { _tenancy = tenancy; }
public ValueTask <IReadOnlyList <EventSlice <TDoc, Guid> > > SliceInlineActions(IQuerySession querySession, IEnumerable <StreamAction> streams, ITenancy tenancy) { return(new (streams.Select(s => { var tenant = tenancy[s.TenantId]; return new EventSlice <TDoc, Guid>(s.Id, tenant, s.Events); }).ToList())); }
public ValueTask <IReadOnlyList <TenantSliceGroup <TDoc, Guid> > > SliceAsyncEvents(IQuerySession querySession, List <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.GetTenant(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(new ValueTask <IReadOnlyList <TenantSliceGroup <TDoc, Guid> > >(list)); }