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