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.

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.
