public void using_live_transformed_events(IDocumentSession session) { var started = new QuestStarted { Name = "Find the Orb" }; var joined = new MembersJoined { Day = 2, Location = "Faldor's Farm", Members = new string[] { "Garion", "Polgara", "Belgarath" } }; var slayed1 = new MonsterSlayed { Name = "Troll" }; var slayed2 = new MonsterSlayed { Name = "Dragon" }; MembersJoined joined2 = new MembersJoined { Day = 5, Location = "Sendaria", Members = new string[] { "Silk", "Barak" } }; session.Events.StartStream <Quest>(started, joined, slayed1, slayed2); session.SaveChanges(); // Our MonsterDefeated documents are created inline // with the SaveChanges() call above and are available // for querying session.Query <MonsterDefeated>().Count() .ShouldBe(2); }
public void build_event() { var slayed = new MonsterSlayed { Name = "The Gorgon" }; var @event = theGraph.BuildEvent(slayed); @event.ShouldBeOfType <Event <MonsterSlayed> >(); @event.Data.ShouldBe(slayed); var mapping = theGraph.EventMappingFor <MonsterSlayed>(); @event.EventTypeName.ShouldBe(mapping.EventTypeName); @event.DotNetTypeName.ShouldBe(mapping.DotNetTypeName); }
public void SampleCopyAndTransformStream() { #region sample_scenario-copyandtransformstream-setup var started = new QuestStarted { Name = "Find the Orb" }; var joined = new MembersJoined { Day = 2, Location = "Faldor's Farm", Members = new[] { "Garion", "Polgara", "Belgarath" } }; var slayed1 = new MonsterSlayed { Name = "Troll" }; var slayed2 = new MonsterSlayed { Name = "Dragon" }; using (var session = theStore.OpenSession()) { session.Events.StartStream <Quest>(started.Name, started, joined, slayed1, slayed2); session.SaveChanges(); } #endregion #region sample_scenario-copyandtransformstream-transform using (var session = theStore.OpenSession()) { var events = session.Events.FetchStream(started.Name); var transformedEvents = events.SelectMany(x => { switch (x.Data) { case MonsterSlayed monster: { // Trolls we remove from our transformed stream return(monster.Name.Equals("Troll") ? new object[] { } : new[] { monster }); } case MembersJoined members: { // MembersJoined events we transform into a series of events return(MemberJoined.From(members)); } } return(new[] { x.Data }); }).Where(x => x != null).ToArray(); var moveTo = $"{started.Name} without Trolls"; // We copy the transformed events to a new stream session.Events.StartStream <Quest>(moveTo, transformedEvents); // And additionally mark the old stream as moved. Furthermore, we assert on the new expected stream version to guard against any racing updates session.Events.Append(started.Name, events.Count + 1, new StreamMovedTo { To = moveTo }); // Transactionally update the streams. session.SaveChanges(); } #endregion }