An implementation of a CQRS/ES system using functional FP in scala.
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.
TODO
and under heavy development. Many of the design decisions will propably change.
The domain of the project is an minimal garage management system.
-
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
-
Cats
-
Http4s
-
fs2
-
Doobie
-
Circe
-
Docker
-
Postgres
TODO Fill the list
These are some of online resources we use to learn and take inspiration from: