Backend Engineer Hiring Challenge

Important Note - please do NOT put “Synpulse” or “Synpulse8” in your code or documents

Summary

For an e-Banking Portal you have been given the task to design and implement a reusable REST API for returning the paginated list of money account transactions created in an arbitrary calendar month for a given customer who is logged-on in the portal. For each transaction ‘page’ return the total credit and debit values at the current exchange rate (from the third-party provider). The list of transactions should be consumed from a Kafka topic. Build a Docker image out of the application and prepare the configuration for deploying it to Kubernetes / OpenShift.

Assumptions

  • Every e-banking client has one or more accounts in different currencies (e.g. GBP, EUR, CHF)
  • There are approximately one hundred thousand e-banking customers, each with a couple thousands of transactions per month.
  • The transactions cover the last ten years and are stored in Kafka with the key being the transaction ID and the value the JSON representation of the transaction
  • The user is already authenticated and the API client invoking the transaction API will send a JWT token containing the user’s unique identity key (e.g. P-0123456789)
  • The exchange rate on any given date is provided by an external API

For simplicity reasons, consider a money account transaction composed of the following attributes:

  • Unique identifier (e.g. 89d3o179-abcd-465b-o9ee-e2d5f6ofEld46)
  • Amount with currency (eg GBP 100-, CHF 75)
  • Account IBAN (eg. CH93-0000-0000-0000-0000-0)
  • Value date (e.g. 01-10-2020)
  • Description (e.g. Online payment CHF)

Deliverables

Design and implement the microservice using:

  • Java
  • Spring libraries: web, kafka, data security
  • Kubernetes

Focus on aspects such as

  • API modeling (Swagger/OpenAPI)
  • Security (authentication and authorization)
  • Data access (schema evolution, efficient data access)
  • Logging and monitoring
  • Unit and integration testing, functional tests, API contract tests, etc,
  • Documentation

Please upload the code to a Git repository together with a README file explaining how the code is organized and how the requirements were implemented, including any relevant decisions in a text document. Include any relevant diagrams describing the architecture, data modeling, C4 context as you see fit for explaining the concepts.

Link the Git repository to a service for continuous integration such as CircleCI and provide the link to the pipeline showing the successful execution of the unit and integration tests.