コード例 #1
0
        private void ApplyEvent(IEvent ev)
        {
            // TODO: Handle incoming events by updating the Mongo database
            switch (ev)
            {
            case CreatedEvent e:
                var resourceType = e.GetEntityType();
                switch (resourceType)
                {
                case ResourceType _ when resourceType == ResourceTypes.Foo:
                    var foo = new Foo
                    {
                        Id        = e.Id,
                        Timestamp = e.Timestamp,
                        UserId    = e.UserId
                    };
                    _db.Add(ResourceTypes.Foo, foo);
                    break;
                }

                break;

            case PropertyChangedEvent e:
                resourceType = e.GetEntityType();
                switch (resourceType)
                {
                case ResourceType _ when resourceType == ResourceTypes.Foo:
                    var originalFoo = _db.GetCollection <Foo>(resourceType).AsQueryable().First(x => x.Id == e.Id);
                    var args        = originalFoo.CreateFooArgs();
                    e.ApplyTo(args);
                    var updatedFoo = new Foo(args)
                    {
                        Id        = e.Id,
                        Timestamp = e.Timestamp,
                        UserId    = originalFoo.UserId
                    };
                    _db.Replace((ResourceTypes.Foo, e.Id), updatedFoo);
                    break;
                }

                break;


            case DeletedEvent e:
                resourceType = e.GetEntityType();
                switch (resourceType)
                {
                case ResourceType _ when resourceType == ResourceTypes.Foo:
                    _db.Delete((ResourceTypes.Foo, e.Id));
                    break;
                }

                break;
            }
        }