Skip to content

raphaeldiscky/go-bank

Repository files navigation

Go Bank 🏦

This application is primarily intended for exploring technical concepts. My goal is to experiment with different technologies, software architecture designs, and all the essential components involved in building a monolithic-based application in Golang.

Features ✨

  • ✅ Building RESTful APIs using the Gin framework for handling HTTP requests
  • ✅ Leveraging gRPC for efficient internal service-to-service communication
  • ✅ Secure authentication using PASETO tokens and JWT
  • ✅ Asynchronous task processing with Redis and Asynq for background processing
  • ✅ Reliable database operations with PostgreSQL and pgx driver
  • ✅ Type-safe database queries with SQLC
  • ✅ Database migrations using golang-migrate
  • ✅ Input validation using go-playground/validator
  • ✅ Structured logging with zerolog
  • ✅ Configuration management with Viper
  • ✅ Testing with testify for assertions and gomock for mocking
  • ✅ Containerized deployment with Docker and docker-compose
  • ✅ Deploying to production environments using Kubernetes on AWS EKS
  • ✅ Automatic SSL/TLS certificate management with cert-manager and Let's Encrypt
  • ✅ CI/CD pipeline with GitHub Actions

Technologies - Libraries 🛠️

Core Framework

Database & Migration

Validation

Authentication & Security

Task Processing

Logging

Testing & Mocking

Documentation

  • Swagger - API documentation with static files for Swagger UI
  • DBML - Database Markup Language for visualizing database schema

Configuration & Environment

Deployment & DevOps

System Architecture 🏗️

The application follows a monolithic architecture pattern with some clean architecture principles applied.