Banking on Clojure web applicationλ︎
Work In Progress
Project actively being developed as part of the Practicalli Study group WebApps.
Code so far is shared on practicalli/banking-on-clojure-webapp GitHub repository
Building a Banking application using Clojure, spec, H2 (development) & Postgresql (live) databases and next.jdbc for SQL queries (migratus for db migrations).
The system infrastructure uses Jetty or HTTP-kit (making this switchable at runtime) and a component life cycle system (probably mount).
Application Design (in progress)λ︎
Data Specifications created using clojure.spec.alpha
- Customer Details
- Account holder
- Bank account
- Multiple Bank accounts
- Credit Card
- Mortgate
Functions and function specifications using clojure.spec.alpha
- register-account-holder
- open-credit-account
- open-savings-account
- open-credit-card-account
- open-mortgage-account
- Make a payment
- Send account notification
- Check for overdraft
Functions with specifications are instrumented to check arguments passed during function calls.
Generative testing is carried out via the kaocha test runner
Development Workflowλ︎
- Write a failing test
- write mock data
- write an function definition that returns the argument
- run tests - tests should fail
- write a spec for the functions argument - customer
- write a spec for the return value
- write a spec for relationship between args and return value
- replace the mock data with generated values from specification
- update functions and make tests pass
- instrument functions
- run specification checks