Skip to content

Banking on Clojure web applicationλ︎

Banking on Clojure web application user interface

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