LambdaFanatics/pure-cqrs-example
An implementation of a CQRS/ES system using functional FP in scala.
pure-cqrs-es-example
An implementation of a CQRS/ES system using functional FP in scala.
Goal
This is a side project for learning and experimentation purposes. It is not a "production ready" system :)
We use a simplified domain model in order to focus only on technical implementation details and functional programming principles.
CQRS and Event Sourcing is a huge domain with many flavors and variations on its own.
Our goal is to implement some of the principles and ideas that we have in a purely functional way.
How to build run and test?
TODO
This is work in progress
and under heavy development. Many of the design decisions will propably change.
Domain
The domain of the project is an minimal garage management system.
Project tasks and status
-
Write side server (that serves ES commands via REST API)
-
Write side validator in memory store
-
An event log (used for Event Sourcing) implemented in postgres
-
Read side server that serves a materialized view of the log (via REST API).
-
Read side server websocket support
-
An alternative event log implemented using kafka
-
Complete dockerized build process
-
User authentication / authorization (using TSec?)
-
A front SPA application (using Angular ?)
-
Nginx configuration as a reverse proxy for the read/write servers
-
Read side server testing
-
Write side server testing
-
Documentation
Stack
-
Cats
-
Http4s
-
fs2
-
Doobie
-
Circe
-
Docker
-
Postgres
TODO Fill the list
Resources
These are some of online resources we use to learn and take inspiration from: