This is what I have done to successfully run Todos on Mac:
git clone https://github.com/meteor-space/todos.git
cd todos
mgp
./run.sh
MGP output should look something like this:
EBIZMacPro:todos darkomijic$ mgp
HEAD is now at 8b51727 Merge pull request #41 from meteor-space/fix/app-config-bug
Processing space-base at HEAD
Cleaning up
Copying package
Done...
HEAD is now at f6c2a9c Merge pull request #16 from meteor-space/fix/application-reset
Processing space-messaging at HEAD
Cleaning up
Copying package
Done...
HEAD is now at 8781cca Merge pull request #35 from meteor-space/fix/process-init-via-event-bug
Processing space-event-sourcing at HEAD
Cleaning up
Copying package
Done...
HEAD is now at 9b2ac9c Merge pull request #4 from meteor-space/fix/lock-deps
Processing space-domain at HEAD
Cleaning up
Copying package
Done...
HEAD is now at efd1caa Merge pull request #43 from meteor-space/feature/improve-missing-component-mapping-error
Processing space-flux at HEAD
Cleaning up
Copying package
Done...
HEAD is now at 1978ad9 Merge pull request #16 from meteor-space/feature/contains-array-of-structs
Processing space-testing at HEAD
Cleaning up
Copying package
Done…
space:base
-> space-base
, space:event-sourcing
-> space-event-sourcing
; however please keep in mind that all Space packages are in still in development so its always best to keep track what commit is used by looking on examples like: https://github.com/meteor-space/donations/blob/develop/git-packages.json
npm install -g mgp
, this is the part you are probably missing since you get mgp is not recognized), cloned todos (git clone https://github.com/meteor-space/todos.git
), cd todos
, mgp
, meteor
node -v
Hi, I'm looking to "gradually" incorporate some of the meteor-space cqrs/eventsourcing stuff you guys have. My current need is pretty light on business logic, but more on the side of needing to update multiple collections (projections) based on something happening. I've been looking at the test_application.coffee and unit tests. It seems realtively straightforward, but one thing that isn't clear to me is how to handle aggregate initialization. It's probably due to other frameworks I've used (e.g. Axon for Java). So just to be clear, to send a command to MyAggregate(id:123). I first need to create a new instance of MyAggregate (using the id), then call .handle(command)?
It's just a little confusing to me, as say Axon,node-cqrs, basically have you just register all your aggregates, then send your commands to a gateway/handler, that then is responsible for routing, instantiation, etc.
As this is an existing app, I can't quite leverage all the cool features you guys seem to have in your full stack. So for now I just need to send commands from my existing code.
@eoliphan: Hi :)
One instance of the Space.eventSourcing.Router
is routing domain commands to all aggregate instances of the some type. For example this is the router that is routing command to instances of Todos.TodoList
aggregate:
https://github.com/meteor-space/todos/blob/master/packages/domain/source/server/todos/todo-router.js#l3
Router has specialinitializingMessage
attribute and that is the command that instantiates new instances of the aggregate:
https://github.com/meteor-space/todos/blob/master/packages/domain/source/server/todos/todo-router.js#l5
Other commands that are routed to the aggregate instances are defined in routeCommands
array:
https://github.com/meteor-space/todos/blob/master/packages/domain/source/server/todos/todo-router.js#l7-l13
Please feel free to ask more questions if you have them. Also take a look at this sample app, it can help you understand how everything is wired up:
https://github.com/meteor-space/todos
This diagram can serve as a cheat sheet for understanding complete, non distributed Space event sourcing infrastructure:
https://raw.githubusercontent.com/meteor-space/todos/master/docs/images/todos-model.png