コード例 #1
0
        //
        // Reads
        //

        internal static TimelinePoint ReadAreaPoint(this EventStoreContext context, ResolvedEvent e, AreaEventMetadata metadata)
        {
            var type = context.ReadEventType(e);

            return(new TimelinePoint(
                       new TimelinePosition(e.Event.EventNumber),
                       metadata.Cause,
                       type,
                       metadata.When,
                       metadata.WhenOccurs,
                       Id.From(e.Event.EventId),
                       metadata.CommandId,
                       metadata.UserId,
                       metadata.Topic,
                       metadata.GetRoutes(context.Area).ToMany(),
                       () =>
            {
                var instance = context.ReadEvent(e, type);

                Event.Traits.When.Set(instance, metadata.When);
                Event.Traits.WhenOccurs.Set(instance, metadata.WhenOccurs);
                Event.Traits.CommandId.Set(instance, metadata.CommandId);
                Event.Traits.UserId.Set(instance, metadata.UserId);

                return instance;
            }));
        }
コード例 #2
0
 internal static EventData GetClientEventData(this EventStoreContext context, Event e) =>
 new EventData(
     Guid.NewGuid(),
     $"timeline:{e.GetType().Name}",
     isJson: true,
     data: context.ToJson(e),
     metadata: null);
コード例 #3
0
        //
        // Event data
        //

        internal static EventData GetAreaEventData(
            this EventStoreContext context,
            Event e,
            TimelinePosition cause,
            DateTimeOffset when,
            DateTimeOffset?whenOccurs,
            Id eventId,
            Id commandId,
            Id userId,
            FlowKey topic,
            Many <FlowKey> routes)
        {
            var type = context.GetEventType(e);

            var metadata = new AreaEventMetadata
            {
                Cause      = cause,
                When       = when,
                WhenOccurs = whenOccurs,
                CommandId  = commandId,
                UserId     = userId,
                Topic      = topic
            };

            metadata.ApplyRoutes(type, routes);

            return(new EventData(
                       eventId.IsUnassigned ? Guid.NewGuid() : Guid.Parse(eventId.ToString()),
                       type.ToString(),
                       isJson: true,
                       data: context.ToJson(e),
                       metadata: context.ToJson(metadata)));
        }
コード例 #4
0
 internal static EventData GetQueryChangedEventData(this EventStoreContext context, QueryChanged e) =>
 new EventData(
     Guid.NewGuid(),
     "timeline:QueryChanged",
     isJson: true,
     data: context.ToJson(e),
     metadata: null);
コード例 #5
0
 public TimelineSubscription(
     EventStoreContext context,
     CatchUpSubscriptionSettings settings,
     TimelinePosition checkpoint,
     ITimelineObserver observer)
 {
     _context    = context;
     _settings   = settings;
     _checkpoint = checkpoint;
     _observer   = observer;
 }
コード例 #6
0
 internal static EventData GetCheckpointEventData(this EventStoreContext context, Flow flow) =>
 new EventData(
     Guid.NewGuid(),
     "timeline:Checkpoint",
     isJson: true,
     data: context.ToJson(flow),
     metadata: context.ToJson(new CheckpointMetadata
 {
     Position      = flow.Context.CheckpointPosition,
     ErrorPosition = flow.Context.ErrorPosition
 }));
コード例 #7
0
 internal static EventData GetScheduledEventData(this EventStoreContext context, TimelinePoint cause, DateTimeOffset now) =>
 context.GetAreaEventData(
     cause.Event,
     cause.Position,
     now,
     null,
     true,
     Id.FromGuid(),
     cause.CommandId,
     cause.UserId,
     null,
     cause.Type.GetRoutes(cause.Event).ToMany());
コード例 #8
0
        internal static IEnumerable <EventData> GetNewEventData(
            this EventStoreContext context,
            TimelinePosition cause,
            FlowKey topic,
            Many <Event> newEvents) =>

        from e in newEvents
        select context.GetAreaEventData(
            e,
            cause,
            e.When,
            Event.Traits.WhenOccurs.Get(e),
            Event.Traits.EventId.Get(e),
            Event.Traits.CommandId.Get(e),
            Event.Traits.UserId.Get(e),
            topic,
            context.GetEventType(e).GetRoutes(e).ToMany());
コード例 #9
0
 internal static byte[] ToJson(this EventStoreContext context, object value) =>
 value == null ? null : context.Json.ToJsonUtf8(value).ToBytes();
コード例 #10
0
 internal static EventType GetEventType(this EventStoreContext context, Event e) =>
 context.Area.Events.Get(e.GetType());
コード例 #11
0
 static Event ReadEvent(this EventStoreContext context, ResolvedEvent e, EventType type) =>
 (Event)context.Json.FromJsonUtf8(e.Event.Data, type.DeclaredType);
コード例 #12
0
 internal static EventType ReadEventType(this EventStoreContext context, ResolvedEvent e) =>
 context.Area.Events.Get(AreaTypeName.From(e.Event.EventType));
コード例 #13
0
 internal static AreaEventMetadata ReadAreaMetadata(this EventStoreContext context, ResolvedEvent e) =>
 context.Json.FromJsonUtf8 <AreaEventMetadata>(e.Event.Metadata);
コード例 #14
0
 internal static Task <WriteResult> AppendToTimeline(this EventStoreContext context, IEnumerable <EventData> data) =>
 context.Connection.AppendToStreamAsync(TimelineStreams.Timeline, ExpectedVersion.Any, data);
コード例 #15
0
        //
        // Metadata
        //

        internal static Task <WriteResult> SetCheckpointStreamMetadata(this EventStoreContext context, Flow flow, StreamMetadata value) =>
        context.Connection.SetStreamMetadataAsync(flow.Context.Key.GetCheckpointStream(), ExpectedVersion.Any, value);
コード例 #16
0
 internal static Task <WriteResult> AppendToClient(this EventStoreContext context, Event e) =>
 context.Connection.AppendToStreamAsync(TimelineStreams.Client, ExpectedVersion.Any, context.GetClientEventData(e));
コード例 #17
0
 internal static Task <WriteResult> AppendToCheckpoint(this EventStoreContext context, Flow flow) =>
 context.AppendEvent(flow.Context.Key.GetCheckpointStream(), context.GetCheckpointEventData(flow));
コード例 #18
0
 internal static Task <WriteResult> AppendToTimeline(this EventStoreContext context, EventData data) =>
 context.AppendEvent(TimelineStreams.Timeline, data);
コード例 #19
0
 internal static CheckpointMetadata ReadCheckpointMetadata(this EventStoreContext context, ResolvedEvent e) =>
 context.Json.FromJsonUtf8 <CheckpointMetadata>(e.Event.Metadata);
コード例 #20
0
        //
        // Appends
        //

        static Task <WriteResult> AppendEvent(this EventStoreContext context, string stream, EventData data) =>
        context.Connection.AppendToStreamAsync(stream, ExpectedVersion.Any, data);
コード例 #21
0
ファイル: TimelineDb.cs プロジェクト: jtark/Totem
 public TimelineDb(EventStoreContext context, CatchUpSubscriptionSettings subscriptionSettings, IResumeProjection resumeProjection)
 {
     _context = context;
     _subscriptionSettings = subscriptionSettings;
     _resumeProjection     = resumeProjection;
 }
コード例 #22
0
 internal static TimelinePoint ReadAreaPoint(this EventStoreContext context, ResolvedEvent e) =>
 context.ReadAreaPoint(e, context.ReadAreaMetadata(e));