Beispiel #1
0
        public static bool IsStreamDeletedEventOrLinkToStreamDeletedEvent(ResolvedEvent resolvedEvent,
                                                                          ReadEventResult resolveResult, out string deletedPartitionStreamId)
        {
            bool isDeletedStreamEvent;

            // If the event didn't resolve, we can't rely on it as a deleted event
            if (resolveResult != ReadEventResult.Success)
            {
                deletedPartitionStreamId = null;
                return(false);
            }

            if (resolvedEvent.IsLinkToDeletedStreamTombstone)
            {
                isDeletedStreamEvent     = true;
                deletedPartitionStreamId = resolvedEvent.EventStreamId;
            }
            else
            {
                isDeletedStreamEvent = StreamDeletedHelper.IsStreamDeletedEvent(
                    resolvedEvent.EventStreamId, resolvedEvent.EventType, resolvedEvent.Data,
                    out deletedPartitionStreamId);
            }

            return(isDeletedStreamEvent);
        }
        public static bool IsStreamDeletedEvent(ResolvedEvent resolvedEvent, out string deletedPartitionStreamId)
        {
            bool isDeletedStreamEvent;

            if (resolvedEvent.IsLinkToDeletedStreamTombstone)
            {
                isDeletedStreamEvent     = true;
                deletedPartitionStreamId = resolvedEvent.EventStreamId;
            }
            else
            {
                isDeletedStreamEvent = StreamDeletedHelper.IsStreamDeletedEvent(
                    resolvedEvent.EventStreamId, resolvedEvent.EventType, resolvedEvent.Data,
                    out deletedPartitionStreamId);
            }
            return(isDeletedStreamEvent);
        }
Beispiel #3
0
        public bool ProcessEvent(
            string partition, CheckpointTag eventPosition, string category1, ResolvedEvent data,
            out string newState, out string newSharedState, out EmittedEventEnvelope[] emittedEvents)
        {
            newSharedState = null;
            emittedEvents  = null;
            newState       = null;
            if (data.EventStreamId != data.PositionStreamId)
            {
                return(false);
            }
            var indexedEventType = data.EventType;

            if (indexedEventType == "$>")
            {
                return(false);
            }

            string positionStreamId;
            var    isStreamDeletedEvent = StreamDeletedHelper.IsStreamDeletedEvent(
                data.PositionStreamId, data.EventType, data.Data, out positionStreamId);

            if (isStreamDeletedEvent)
            {
                indexedEventType = "$deleted";
            }

            emittedEvents = new[]
            {
                new EmittedEventEnvelope(
                    new EmittedDataEvent(
                        _indexStreamPrefix + indexedEventType, Guid.NewGuid(), "$>", false,
                        data.EventSequenceNumber + "@" + positionStreamId,
                        isStreamDeletedEvent
                            ? new ExtraMetaData(new Dictionary <string, JRaw> {
                    { "$deleted", new JRaw(-1) }
                })
                            : null, eventPosition, expectedTag: null))
            };

            return(true);
        }
Beispiel #4
0
        public bool ProcessEvent(
            string partition, CheckpointTag eventPosition, string category1, ResolvedEvent data,
            out string newState, out string newSharedState, out EmittedEventEnvelope[] emittedEvents)
        {
            newSharedState = null;
            emittedEvents  = null;
            newState       = null;
            string positionStreamId;
            var    isStreamDeletedEvent = StreamDeletedHelper.IsStreamDeletedEvent(
                data.PositionStreamId, data.EventType, data.Data, out positionStreamId);

            var category = _streamCategoryExtractor.GetCategoryByStreamId(positionStreamId);

            if (category == null)
            {
                return(true); // handled but not interesting
            }
            string linkTarget;

            if (data.EventType == SystemEventTypes.LinkTo)
            {
                linkTarget = data.Data;
            }
            else
            {
                linkTarget = data.EventSequenceNumber + "@" + data.EventStreamId;
            }

            emittedEvents = new[]
            {
                new EmittedEventEnvelope(
                    new EmittedLinkToWithRecategorization(
                        _categoryStreamPrefix + category, Guid.NewGuid(), linkTarget, eventPosition, expectedTag: null,
                        originalStreamId: positionStreamId, streamDeletedAt: isStreamDeletedEvent ? -1 : (int?)null))
            };

            return(true);
        }