Practical example for learning how to model a bi-temporal domain using Jet.com's Equinox Event Sourcing Platform.
Features
- Bi-temporal, event sourced API in F# using Jet.com's Equinox platform and gRPC π.
- Protobuf files compiled with Uber's Prototool π§.
- Fully typed GraphQL API using FSharp.Data.GraphQL π.
- Centralized logging with Seq π.
- Web application using React and TypeScript π».
- Fully Dockerized for fast local development π³.
- Integration tests and example CI using GitHub Actions β‘.
- Build automation using FAKE π¨.
The domain model is a lease, such as a car lease. A more detailed explanation about the motivation for modeling a bi-temporal domain can be found in the accompanying blog post.
docker-compose up -d --build web-app
Endpoints:
- http://localhost:2113 -> Event Store UI (database; user:admin password:changeit)
- http://localhost:8081 -> Seq UI (logging)
- http://localhost:3000 -> Web application
equinox-tutorial
βββ README.md --> You are here
βββ .github --> CI/CD
βββ docker-compose.yml --> Dockerization
βββ web-app --> Web application
βββ graphql-api --> GraphQL API
βββ lease-api --> Lease gRPC API (business logic)
βββ protos --> Protobuf files