Exemple #1
0
            public async Task RemoveEntityFromProjectionAsync(ProjectionSourceDescriptor projectionSource,
                                                              ProjectionTargetDescriptor removedProjection,
                                                              CancellationToken cancellation)
            {
                var(originalMetadata, metadata) = await GetMetadataAsync(removedProjection, cancellation);

                if (metadata == null)
                {
                    Assert(false);
                    return;
                }

                var removed = metadata.ProjectionSources
                              .RemoveFirstWhere(p => p.Id == projectionSource.SourceId &&
                                                p.Type == projectionSource.SourceType.GetUnqualifiedTypeName());

                Assert(removed != null);

                if (!metadata.ProjectionSources.Any())
                {
                    _targetMetadataCache[removedProjection] = new ProjectionTargetMetadataCacheEntry(originalMetadata,
                                                                                                     metadata: null,
                                                                                                     touched: true);

                    var predicate  = DataPropertyHelper.BuildPredicate <TProjectionId, TProjection>(metadata.TargetId);
                    var projection = await _database.GetAsync(predicate, cancellation).FirstOrDefault();

                    if (projection != null)
                    {
                        _targetsToDelete.Add(projection);
                        //await _database.RemoveAsync(projection, cancellation);
                    }
                }

                _targetMetadataCache[removedProjection] = new ProjectionTargetMetadataCacheEntry(originalMetadata,
                                                                                                 metadata,
                                                                                                 touched: true);
            }
Exemple #2
0
        public Task <ISnapshot> GetSnapshotAsync(string bucketId, string streamId, long maxRevision = default, CancellationToken cancellation = default)
        {
            if (maxRevision < 0)
            {
                throw new ArgumentOutOfRangeException(nameof(maxRevision));
            }

            Expression <Func <Snapshot, bool> > predicate;

            if (maxRevision == default)
            {
                predicate = snapshot => snapshot.BucketId.Equals(bucketId) &&
                            snapshot.StreamId.Equals(streamId);
            }
            else
            {
                predicate = snapshot => snapshot.BucketId.Equals(bucketId) &&
                            snapshot.StreamId.Equals(streamId) &&
                            snapshot.StreamRevision <= maxRevision;
            }

            return(_database.GetAsync(predicate, cancellation)
                   .OrderByDescending(snapshot => snapshot.StreamRevision)
                   .Cast <ISnapshot>()
                   .FirstOrDefault(cancellation));
        }