Abaks: initial requirementsGautier DI FOLCO June 04, 2023 [dev] #haskell #design #project #abaks
A long time ago I "started" a side project called abaks, which is a project for personal bank reconciliation statements.
I've been quite busy these lasts months and hopefully my backlog reached the point where I can start working on it.
This project is personal to me as it is one of the thing my mother taught me.
While I could handle it on my own, I have received some requests to have a real-world project exercising
I cannot come-up with a real-world project on my spare time, of course, but I can build one, explaining the trade-offs along the way.
In particular, I plan to rely on DDD, especially Event Sourcing as foundation of abaks. I will rely on my interpretation of The Clean Architecture (which slightly diverge from the Hexagonal architecture).
- Entites will rely on Event Sourcing
- Use Cases will rely on
- Presenters will deal with the back-and-forth of
servantwill be used to expose an API
Note: many shortcuts will be taken, for example, I won't detail all the tests done (except if U get requests on this point), I will also use a file-based event store, without projections.
The basic idea is to log a bunch of entries (expected and actual), when they match, they are "validated", otherwise the entry should be somehow "fixed".
Let's start this series with the basic requirements:
- I should start a Period with a name (i.e. "June 2023"), start and stop dates, an initial balance
- I can add/change/comment/delete an Entry, which is defined by an amount, a date, and a category
- An Entry can be expected or not
- At the end, I should be able to validate or flag in conflict an entry
For the moment, I won't:
- Deal with multiple currencies
- Have multiple accounts (i.e. bank account and credit card)
- Handle periodic entries (i.e. monthly phone bills)
Let's begin a new adventure!