Project Case Study

Simple Bank

A simple microservices that simulates a banking system, written in Go. The app can be also run as a Docker container.

GoGo
DockerDocker
Simple Bank

Overview

Simple Bank is a backend simulation of a banking system, designed to demonstrate robust API development in Go. It handles account creation, money transfers between accounts, and transaction history with strong consistency guarantees.

Key Features

  • ACID Transactions: Ensures money transfers are atomic and consistent.
  • RESTful API: Clean, documented endpoints for all banking operations.
  • Authentication: JWT-based authentication and Paseto tokens.
  • Containerization: Fully Dockerized for easy deployment.

Technical Implementation

  • Language: Go (Golang)
  • Database: PostgreSQL with sqlc for type-safe SQL queries.
  • Migrations: Golang-migrate for database schema versioning.
  • Testing: Extensive unit testing with mocks for high code coverage.
  • CI/CD: GitHub Actions pipeline for automated testing and building.

Challenges & Solutions

Handling concurrency was critical. I used database-level locking (SELECT FOR UPDATE) to prevent race conditions during money transfers, ensuring that balances technically can never go below zero due to concurrent requests.