Exemple #1
0
        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
            });
        }
Exemple #2
0
        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;
        }
Exemple #3
0
 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;
 }
Exemple #4
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);
        }
Exemple #5
0
 public static string TvpFor(this ITenancy me, Enum role) => TvpFor(me, role.ToInt32());
Exemple #6
0
 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)
 {
 }
Exemple #8
0
 public CompositeDocumentCleaner(ITenancy tenancy)
 {
     _tenancy = tenancy;
 }
Exemple #9
0
 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()));
 }
Exemple #10
0
        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));
        }