Skip to content
Browse files

first draft

  • Loading branch information...
1 parent a390381 commit 4ad6abb794fac31525942bfb3976eda96e5d3e9a @jamuhl jamuhl committed
Showing with 137 additions and 4 deletions.
  1. +137 −4 README.markdown
View
141 README.markdown
@@ -1,9 +1,142 @@
-## Introduction
+# Introduction
-The project goal is to provide an eventstore in node.js.
+The project goal is to provide an eventstore implementation for node.js:
-The project is inspired by Jonathan Oliver's [EventStore](https://github.com/joliver/EventStore) for .net.
+- load and store events via EventStream object
+- event dispatching to your publisher
+- supported Dbs (MongoDb, CouchDb, Redis)
+- snapshot support
-NOTHING TO SHOW RIGHT NOW.
+# Installation
+
+ npm install eventstore
+
+choose one of the existing storage implementation or provide your own:
+
+ // for mongoDb
+ npm install eventstore.mongoDb
+
+ // for couchDb
+ npm install eventstore.couchDb
+
+ // for redis
+ npm install eventstore.redis
+
+# Usage
+
+### Require the module and init the eventstore:
+
+ var eventstore = require('eventstore');
+
+ var es = eventstore.createStore(); // optional pass in your options
+
+By default the eventstore will use an inMemory Storage, a fakePublisher and no logger.
+
+To use the provided console.logger you could create the eventstore
+with option `eventstore.createStore({logger: 'console'});`.
+
+### Provide implementation for storage and publishing events
+
+Example will use redis storage, but same will work for mongoDb and couchDb.
+
+ require storage = require('eventstore.redis');
+
+ storage.createStorage(function(err, store) {
+ es.configure(function() {
+ es.use(store);
+ es.use(publisher); // your publisher must provide function 'publisher.publish(event)'
+ // es.use(logger);
+ });
+
+ // start eventstore
+ es.start();
+ });
+
+### Work with the eventstore
+
+get the eventhistory of an aggregate
+
+ es.getEventStream(aggregateId, 0, function(err, stream) {
+ var history = stream.events; // the original event will be in events[i].payload
+
+ // myAggregate.loadFromHistory(history);
+ });
+
+store a new event and commit it to store
+
+ es.getEventStream(aggregateId, 0, function(err, stream) {
+
+ stream.addEvent(new event);
+ stream.commit();
+
+ });
+
+the committed event will be dispatched to the provided publisher
+
+### Work with snapshotting
+
+get snapshot and eventhistory from the snapshot point
+
+ es.getFromSnapshot(aggregateId, function(err, snapshot, stream) {
+
+ var snap = snapshot.data;
+ var history = stream.events; // events history from given snapshot
+
+ myAggregate.loadSnapshot(snap);
+ myAggregate.loadFromHistory(history);
+
+ });
+
+create a snapshot point
+
+ es.getFromSnapshot(aggregateId, function(err, snapshot, stream) {
+
+ var snap = snapshot.data;
+ var history = stream.events; // events history from given snapshot
+
+ myAggregate.loadSnapshot(snap);
+ myAggregate.loadFromHistory(history);
+
+ // create a new snapshot depending on your rules
+ if (history.length > myRange) {
+ es.createSnapshot(aggregateId, stream.currentRevision(), myAggregate.getSnap());
+ }
+
+ // go on: store new event and commit it
+
+ });
+
+
+
+
+# Sample Integration
+
+- [nodeCQRS](https://github.com/jamuhl/nodeCQRS) A CQRS sample integrating eventstore
+
+# Inspiration
+
+- Jonathan Oliver's [EventStore](https://github.com/joliver/EventStore) for .net.
+
+# License
+
+Copyright (c) 2012 Kaba AG, MIC AWM
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.

0 comments on commit 4ad6abb

Please sign in to comment.
Something went wrong with that request. Please try again.