private async Task AppendReadingsCollectedEvents(string streamId, DateTime fromDate, int dayCount) { var eventStore = new CosmosDBEventStore(EndpointUri, AuthKey, Database); var stream = await eventStore.LoadStreamAsync(streamId); // Only append more ReadingsCollected events if we haven't done this before. // This can be detected by looking at the stream version. if (stream.Version <= 3) { var events = Enumerable.Range(0, dayCount - 1) .Select(i => new MeterReadingsCollected { Date = fromDate.AddDays(i), Readings = GenerateMeterReadings(fromDate.AddDays(i)).ToArray() }) .ToList(); await eventStore.AppendToStreamAsync(streamId, stream.Version, events); // Wait a little while before adding the last one. // This ensures that the last event will be at a different timestamp // which is better for explaining the mechanism. await Task.Delay(TimeSpan.FromSeconds(2)); await eventStore.AppendToStreamAsync(streamId, stream.Version + events.Count, new IEvent[] { new MeterReadingsCollected { Date = fromDate.AddDays(dayCount), Readings = GenerateMeterReadings(fromDate.AddDays(dayCount)).ToArray() } }); } }
public async Task SC02_DomainAsync() { var eventStore = new CosmosDBEventStore(EndpointUri, AuthKey, Database); // Request parameters. var meterId = "2"; var postalCode = "111 64"; var houseNumber = "4"; var activationCode = "supersecret"; // 1. New domain object. var meter = new Meter(meterId, postalCode, houseNumber, activationCode); var repository = new MeterRepository(eventStore); var succes = await repository.SaveMeterAsync(meter); Assert.IsTrue(succes, "Unexpected stream version encountered."); // 2. Call business logic on domain object. meter = await repository.LoadMeterAsync(meterId); meter.Activate(activationCode); succes = await repository.SaveMeterAsync(meter); Assert.IsTrue(succes, "Unexpected stream version encountered."); }
public async Task SC03_DomainAddAsync() { var eventStore = new CosmosDBEventStore(EndpointUri, AuthKey, Database); // Request parameters. var meterId = "87000002"; var postalCode = "9999 BB"; var houseNumber = "4"; var activationCode = "supersecret"; // New domain object. var meter = new Meter(meterId, postalCode, houseNumber, activationCode); var repository = new MeterRepository(eventStore); var succes = await repository.SaveMeterAsync(meter); Assert.IsTrue(succes, "Unexpected stream version encountered."); }
public async Task SC04_DomainUpdateAsync() { var eventStore = new CosmosDBEventStore(EndpointUri, AuthKey, Database); // Request parameters. var meterId = "87000002"; var activationCode = "supersecret"; // Load domain object. var repository = new MeterRepository(eventStore); var meter = await repository.LoadMeterAsync(meterId); // Call business logic on domain object. meter.Activate(activationCode); var succes = await repository.SaveMeterAsync(meter); Assert.IsTrue(succes, "Unexpected stream version encountered."); }
public async Task SC02_AppendToExistingStreamAsync() { var eventStore = new CosmosDBEventStore(EndpointUri, AuthKey, Database); var streamId = $"meter:87000001"; var stream = await eventStore.LoadStreamAsync(streamId); var readingsCollected = new MeterReadingsCollected { Date = DateTime.Today, Readings = GenerateMeterReadings(DateTime.Today).ToArray() }; var succes = await eventStore.AppendToStreamAsync( streamId, stream.Version, new IEvent[] { readingsCollected }); Assert.IsTrue(succes, "Unexpected stream version encountered."); }
public async Task SC01_StreamsAsync() { var eventStore = new CosmosDBEventStore(EndpointUri, AuthKey, Database); var meterRegistered = new MeterRegistered { MeterId = "1", PostalCode = "1852ER", HouseNumber = "25", ActivationCode = "supersecret" }; var meterActivated = new MeterActivated(); // 1. Add a new stream. var streamId = $"meter:{meterRegistered.MeterId}"; var succes = await eventStore.AppendToStreamAsync( streamId, 0, new IEvent[] { meterRegistered, meterActivated }); Assert.IsTrue(succes, "Unexpected stream version encountered."); }
private OrderSystemRepository GetOrderSystemRepository() { var eventTypeResolver = new EventTypeResolver(); if (_testConfig.UseInMemoryEventStore) { var eventStore = new InMemoryEventStore( eventTypeResolver, new Dictionary <string, List <string> >()); return(new OrderSystemRepository(eventStore, null)); } else { var eventStore = new CosmosDBEventStore( eventTypeResolver, _testConfig.EventsEndpointUri, _testConfig.EventsAuthKey, _testConfig.EventsDatabase, _testConfig.EventContainer); var snapshotStore = new CosmosSnapshotStore(_testConfig.SnapshotsEndpointUri, _testConfig.SnapshotsAuthKey, _testConfig.SnapshotsDatabase, _testConfig.SnapshotsContainer); return(new OrderSystemRepository(eventStore, snapshotStore)); } }