Write a spring boot APIs that each serve a given BIAN Service Domain. The data that the APIs
exposed are sourced from Systems of Record to produce a realtime feed through Kafka. Our APIs are
either written on top of Kafka topics directly using Event Sourcing or we use the traditional approach
of sinking our data from Kafka to a database and write our API on top of the databases.
The purpose of this challenge is to have you work through a problem where the expectation is for you
to produce an API. We have specifically opted to make the problem statement as generic as possible
to allow you to:
The ONLY requirement is that this API MUST BE WRITTEN USING THE SPRING BOOT
FRAMEWORK.
Problem Statement
The Data Feeds
Let’s assume you have the two following data feeds:
Feed 1: The balances
This is a data feed, where each event represents a single balance update for a given account.
A single record looks like this
{“accountNumber”: “abc”, “lastUpdateTimestamp”: “2020-01-01T01:02:03.8Z”, “balance”: 89.1}
Feed 2: The transactions
This is a data feed representing transactions that are occuring. Each record will be a single transaction
at the bank. Keep in mind that there are two types of transactions: 1. DEPOSIT and 2. WITHDRAW.
A single record looks like this
For a DEPOSIT:
{“accountNumber”: “abc”, “transactionTs”: “2020-01-03T01:02:03.8Z”, “type”: “DEPOSIT”, “amount”: 89.1}
Or a WITHDRAW
{“accountNumber”: “abc”, “transactionTs”: “2020-01-03T01:02:03.8Z”, “type”: “WITHDRAW”, “amount”: 89.1}
The API [ the actual meat of the assignment 😉 ]
Please write an API that can serve the following queries:
1. Given an accountNumber, return the latest balance.
2. Given an accountNumber and a time range such as: Today, Last 7 days, last Month and the
more general case of a range between date X and date Y. For example, I should be able to ask for all
my transactions between January 8th, 2019 and November 28th, 2020.
3. Repeat 2, but filter for type. I.E. Show me transactions with type WITHDRAW.
Some hints:
1. Make sure that any technical choice you are making is backed up by good reasoning. Meaning,
if you decide to go with event sourcing? Why? If you choose to use a noSQL datbase? Why?
2. Make reasonable assumptions about the problem. If any extra detail is left out, just ride the
wave and make assumptions. There are no wrong answers here.