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;
            }
        }