git clone git@github.com:robinbortlik/rails_event_store_library.git
bundle install
bundle exec rake db:setup
This is experimental project built just for education purposes.
Application implements basic "Library" functions to keep evidence of borrowed and returned books.
App is available on https://rails-event-store-library.herokuapp.com/
![Screenshot 2023-05-28 at 21 44 08](https://private-user-images.githubusercontent.com/228502/241583526-e870b9f0-1936-4099-802e-3045611a968f.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTQ3MzQ4MTUsIm5iZiI6MTcxNDczNDUxNSwicGF0aCI6Ii8yMjg1MDIvMjQxNTgzNTI2LWU4NzBiOWYwLTE5MzYtNDA5OS04MDJlLTMwNDU2MTFhOTY4Zi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNTAzJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDUwM1QxMTA4MzVaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0zOWVmYjJkZmViNzJmYjUwNGY5Njc1MTM3OTUyNjE0NjJmY2E3ZGJiMjc5YThhZWJkZGZkODBkNjNlYzliMWUyJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.PFN81v1uLFwmorkIKFeWrzjSqfun2q0tC-KSlWbnmtA)
![Screenshot 2023-05-28 at 21 44 15](https://private-user-images.githubusercontent.com/228502/241583524-ad5dce00-a95f-41be-8aff-849866a08d20.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTQ3MzQ4MTUsIm5iZiI6MTcxNDczNDUxNSwicGF0aCI6Ii8yMjg1MDIvMjQxNTgzNTI0LWFkNWRjZTAwLWE5NWYtNDFiZS04YWZmLTg0OTg2NmEwOGQyMC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNTAzJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDUwM1QxMTA4MzVaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0yMDAzZWQ2N2E4MDUyNjYxNjZkYmFiMmU3OTBkYzkwZWU0OGU2MDI1YjIzNjBiMWM4ZWUxNWZlZmQxMmU5OTU3JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.YnDij1xvFUXsiK1JolqpE2XjjOckG-gs1uc56fpqw0A)
All object state changes are handled as events with help of Rails Event Store library
- app
|
- lib
|
- Domain (Books, Users)
|
- Purpose (Models, Events, Commands, Aggregates)
|
- Class/Module name (book.rb, borrow.rb, on_return.rb)
HTTP -> controller#action
-> command_bus(command)
-> aggregate.action
-> event triggered
-> event store updated
-> read_model updated
-
How to correctly design and update the read model, so I do not need to duplicate business logic between aggregate root and read model
-
How read model handles updates on linked objects:
Example:
Book read model
storesUser full name
. User updates his name, shall I subscribe book toUser name changed
event and update the user name stored on the book record?