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.