public static Func <Task> React( IEventStore eventStore, Func <IAsyncDocumentSession> getSession, object @event ) { return(@event switch { V1.ClassifiedAdPublished e => () => EmitPublishedAdEvent(e.Id, e.PublishedAt), _ => (Func <Task>)null });
public static Func <Task> GetHandler( IAsyncDocumentSession session, object @event) { Func <Guid, string> getDbId = PublishedAd.GetDatabaseId; return(@event switch { V1.ClassifiedAdPublished e => () => Create(e), V1.ClassifiedAdTitleChanged e => () => Update(e.Id, ad => ad.Title = e.Title), V1.ClassifiedAdPriceUpdated e => () => Update(e.Id, ad => ad.Price = e.Price), V1.ClassifiedAdDeleted e => () => Delete(e.Id), _ => (Func <Task>)null });
public async Task Project(object @event) { switch (@event) { case ClassifiedAdPublished e: var photoUrl = _getUserPhoto(e.OwnerId); var newEvent = new V1.ClassifiedAdPublished { Id = e.Id, OwnerId = e.OwnerId, ApprovedBy = e.ApprovedBy, SellersPhotoUrl = photoUrl }; await _eventStoreConnection.AppendEvents( StreamName, ExpectedVersion.Any, newEvent); break; } }