public static StreamDbContextOptionsBuilder UseInMemoryStream <T>(this StreamDbContextOptionsBuilder builder, IObservable <T> observable)
 {
     builder.Options.SetStreamFactory((options, type, streamPatterns) =>
     {
         return(new Stream <T>(observable, options, streamPatterns));
     });
     return(builder);
 }
예제 #2
0
        public void Setup()
        {
            _subject = new Subject <string>();

            var options = new StreamDbContextOptionsBuilder()
                          .UseInMemoryStream(_subject.AsQbservable())
                          .Options;

            _sut = new StreamDbContext(options);
        }
예제 #3
0
        static async Task Main(string[] args)
        {
            var baseTypes  = new[] { typeof(BaseEvent) };
            var eventTypes = typeof(BaseEvent).Assembly.GetTypes()
                             .Where(t => t.IsSubclassOf(typeof(BaseEvent)));

            var options = new StreamDbContextOptionsBuilder()
                          .UseEventStore("127.0.0.1:5001")
                          .RegisterTypes(() => baseTypes.Concat(eventTypes))
                          .Options;

            var es             = new EventStoreContext(options);
            var orderEvents    = es.FromStreams <BaseEvent>("Order-*", "PaymentPlan-*");
            var customerEvents = es.FromStreams <BaseEvent>("Customer-*");

            var stream = orderEvents
                         .GroupBy(e =>
                                  (e is OrderCreatedEvent) ? ((OrderCreatedEvent)e).Id :
                                  (e is OrderCustomerLinkedV2Event) ? ((OrderCustomerLinkedV2Event)e).OrderId :
                                  (e is OrderConfirmedEvent) ? ((OrderConfirmedEvent)e).OrderId :
                                  (e is PaymentPlanCreatedEvent) ? ((PaymentPlanCreatedEvent)e).Id :
                                  Guid.Empty
                                  )
                         .Where(g => g.Key != Guid.Empty)
                                                //.Select(g => g
                                                //    .Aggregate(
                                                //        Guid.Empty,
                                                //        (s, e) => (Guid)(e.GetType().GetProperty("CustomerId") == null ? s : e.GetType().GetProperty("CustomerId").GetValue(e, null))
                                                //    )
                                                //    .Zip(g, (c, e) => g.Where(x => !x.Bag.ContainsKey("CustomerId")).Do(x => x.Bag.Add("CustomerId", c)))
                                                //    .SelectMany(x => x)
                                                //)
                         .SelectMany(g => g)
                         .Merge(customerEvents) // NB: This doesn't actually work - it's an observable and there's more to joining streams than this...
                         .GroupBy(e =>
                                  (e is OrderCustomerLinkedV2Event) ? ((OrderCustomerLinkedV2Event)e).CustomerId :
                                  (e is OrderConfirmedEvent) ? ((OrderConfirmedEvent)e).CustomerId :
                                  //(e is OrderCreatedEvent) ? (Guid)(e.Bag.ContainsKey("CustomerId") ? e.Bag["CustomerId"] : Guid.Empty) :
                                  //(e is PaymentPlanCreatedEvent) ? (Guid)(e.Bag.ContainsKey("CustomerId") ? e.Bag["CustomerId"] : Guid.Empty) :
                                  (e is CustomerDetailsAddedEvent) ? ((CustomerDetailsAddedEvent)e).CustomerId :
                                  Guid.Empty
                                  )
                         //.Where(g => g.Key == new Guid("879c5d39-fd72-4392-bf88-8bba363e590e"))
                         .SelectMany(g => g)
                         .Subscribe(
                onNext: s => Console.WriteLine(JsonConvert.SerializeObject(s)),
                onError: e => Console.WriteLine("ERROR: " + e),
                onCompleted: () => Console.WriteLine("DONE")
                );

            while (!Console.KeyAvailable && Console.ReadKey(true).Key != ConsoleKey.Escape)
            {
                await Task.Delay(50);
            }
        }
예제 #4
0
        public void Setup()
        {
            _subject = new Subject <string>();

            _mockHttp = new MockHttpMessageHandler();
            var client = new HttpClient(_mockHttp);

            var options = new StreamDbContextOptionsBuilder()
                          .UseGrpcStream("http://some-host")
                          .Options;

            _sut = new StreamDbContext(options);
        }
예제 #5
0
        static async Task Main(string[] args)
        {
            var types = new[] { typeof(TestEvent) };

            var options = new StreamDbContextOptionsBuilder()
                          .UseGrpcStream("127.0.0.1:5001")
                          .RegisterTypes(() => types)
                          .Options;

            var es = new StreamDbContext(options);

            var orderEvents = es.FromAll <TestEvent>()
                              .Subscribe(
                onNext: s => Console.WriteLine(JsonConvert.SerializeObject(s)),
                onError: e => Console.WriteLine("ERROR: " + e),
                onCompleted: () => Console.WriteLine("DONE")
                );

            while (!Console.KeyAvailable && Console.ReadKey(true).Key != ConsoleKey.Escape)
            {
                await Task.Delay(50);
            }
        }
예제 #6
0
 public static StreamDbContextOptionsBuilder UseEventStore(this StreamDbContextOptionsBuilder builder, string url)
 {
     builder.Options.SetConnectionString(url);
     builder.Options.SetStreamFactory(CreateStream);
     return(builder);
 }
예제 #7
0
 public static StreamDbContextOptionsBuilder UseGrpcStream(this StreamDbContextOptionsBuilder builder, string url)
 {
     builder.Options.SetConnectionString(url);
     builder.Options.SetStreamFactory(StreamFactory);
     return(builder);
 }