Skip to content
/ microservices-go Public template

Golang Microservice Boilerplate using PSQL, Docker and Cucumber, API REST. Gin Go and GORM with pagination and implementation of a Clean Architecture.

License

Notifications You must be signed in to change notification settings

gbrayhan/microservices-go

Repository files navigation

Golang Microservices - Clean Architecture

issues forks stars license CodeFactor Codacy Badge

A production-ready microservices boilerplate built with Go, implementing Clean Architecture principles with comprehensive testing, security, and documentation.

πŸ—οΈ Architecture Overview

Clean Architecture Layers

graph TB subgraph "External Layer" UI[Web UI] API[REST API] DB[(PostgreSQL)] end subgraph "Infrastructure Layer" Controllers[REST Controllers] Repositories[Repositories] Security[JWT Security] Logger[Structured Logging] end subgraph "Application Layer" AuthUC[Auth Use Cases] UserUC[User Use Cases] MedicineUC[Medicine Use Cases] end subgraph "Domain Layer" Entities[Domain Entities] Rules[Business Rules] Errors[Domain Errors] end UI --> API API --> Controllers Controllers --> AuthUC Controllers --> UserUC Controllers --> MedicineUC AuthUC --> Entities UserUC --> Entities MedicineUC --> Entities Repositories --> DB AuthUC --> Repositories UserUC --> Repositories MedicineUC --> Repositories Security --> AuthUC Logger --> Controllers Logger --> Repositories 
Loading

Dependency Flow

graph LR subgraph "Dependencies Point Inward" A[Infrastructure] --> B[Application] B --> C[Domain] A --> C end subgraph "Domain is Independent" C --> D[No External Dependencies] end 
Loading

πŸš€ Quick Start

Prerequisites

  • Go 1.24.2+
  • Docker & Docker Compose
  • PostgreSQL (via Docker)

Installation

# Clone the repository git clone https://github.com/gbrayhan/microservices-go cd microservices-go # Copy environment file cp .env.example .env # Start services docker-compose up --build -d

Verify Installation

# Check if services are running docker-compose ps # Test the API curl http://localhost:8080/v1/health

πŸ“‹ Features

Core Features

  • Clean Architecture: Fully implemented with dependency inversion
  • JWT Authentication: Secure token-based authentication
  • Structured Logging: Zap logger with correlation IDs
  • Comprehensive Testing: Unit, integration, and acceptance tests
  • API Documentation: Complete REST API documentation
  • Error Handling: Centralized error management
  • Validation: Request validation with custom rules
  • Search & Pagination: Advanced search capabilities

Technical Stack

  • Framework: Gin-Gonic (HTTP router)
  • Database: PostgreSQL with GORM
  • Authentication: JWT with refresh tokens
  • Logging: Zap structured logger
  • Testing: Go testing + Cucumber integration tests
  • Documentation: Comprehensive API documentation
  • Containerization: Docker & Docker Compose
  • Code Quality: golangci-lint, CodeFactor, Codacy

πŸ”§ Development

Project Structure

microservices-go/ β”œβ”€β”€ src/ β”‚ β”œβ”€β”€ domain/ # 🎯 Domain Layer (Entities & Business Rules) β”‚ β”œβ”€β”€ application/ # πŸ“‹ Application Layer (Use Cases) β”‚ └── infrastructure/ # πŸ”§ Infrastructure Layer β”‚ β”œβ”€β”€ di/ # Dependency Injection β”‚ β”œβ”€β”€ repository/ # Data Access Layer β”‚ β”œβ”€β”€ rest/ # HTTP Controllers β”‚ β”œβ”€β”€ security/ # JWT & Security β”‚ └── logger/ # Structured Logging β”œβ”€β”€ Test/ β”‚ └── integration/ # Integration Tests β”œβ”€β”€ docs/ # Documentation └── docker-compose.yml # Development Environment 

Available Commands

# Run the application go run main.go # Run tests go test ./... # Run tests with coverage ./coverage.sh # Run integration tests ./scripts/run-integration-test.bash # Lint code golangci-lint run ./... # Security scan trivy fs .

πŸ” Authentication Flow

Login Sequence

sequenceDiagram participant Client participant AuthController participant AuthUseCase participant UserRepository participant JWTService participant Database Client->>AuthController: POST /auth/login AuthController->>AuthUseCase: Login(email, password) AuthUseCase->>UserRepository: GetByEmail(email) UserRepository->>Database: SELECT * FROM users Database-->>UserRepository: User data UserRepository-->>AuthUseCase: User entity AuthUseCase->>AuthUseCase: Validate password AuthUseCase->>JWTService: Generate tokens JWTService-->>AuthUseCase: Access + Refresh tokens AuthUseCase-->>AuthController: User + Tokens AuthController-->>Client: 200 OK + Tokens 
Loading

Token Refresh Flow

stateDiagram-v2 [*] --> Authenticated Authenticated --> TokenExpired: Access token expires TokenExpired --> Refreshing: Send refresh token Refreshing --> Authenticated: New tokens received Refreshing --> Unauthorized: Invalid refresh token Unauthorized --> [*]: Re-login required Authenticated --> [*]: Logout 
Loading

πŸ“Š API Endpoints

Authentication

  • POST /v1/auth/login - User login
  • POST /v1/auth/access-token - Refresh access token

Users

  • GET /v1/user - Get all users
  • POST /v1/user - Create user
  • GET /v1/user/:id - Get user by ID
  • PUT /v1/user/:id - Update user
  • DELETE /v1/user/:id - Delete user
  • GET /v1/user/search - Search users with pagination
  • GET /v1/user/search-property - Search by specific property

Medicines

  • GET /v1/medicine - Get all medicines
  • POST /v1/medicine - Create medicine
  • GET /v1/medicine/:id - Get medicine by ID
  • PUT /v1/medicine/:id - Update medicine
  • DELETE /v1/medicine/:id - Delete medicine
  • GET /v1/medicine/search - Search medicines with pagination
  • GET /v1/medicine/search-property - Search by specific property

πŸ§ͺ Testing Strategy

Test Pyramid

graph TB subgraph "Test Pyramid" E2E[End-to-End Tests<br/>Cucumber Integration] Integration[Integration Tests<br/>API Testing] Unit[Unit Tests<br/>Use Cases & Controllers] end E2E --> Integration Integration --> Unit 
Loading

Test Coverage

# Run all tests with coverage ./coverage.sh # Expected coverage: β‰₯ 80%

πŸ”’ Security Features

  • JWT Authentication: Access and refresh tokens
  • Password Hashing: bcrypt with salt
  • CORS Configuration: Cross-origin resource sharing
  • Input Validation: Request sanitization
  • Error Handling: No sensitive data exposure
  • Security Headers: XSS protection, content security policy

πŸ“ˆ Monitoring & Observability

Logging Structure

{ "level": "info", "timestamp": "2024-01-01T00:00:00Z", "message": "User login successful", "user_id": 123, "email": "user@example.com", "correlation_id": "req-123-456", "service": "auth-service" }

Health Checks

# Health endpoint GET /v1/health # Response { "status": "healthy", "timestamp": "2024-01-01T00:00:00Z", "version": "1.0.0" }

πŸš€ Deployment

Docker Deployment

# Build production image docker build -t microservices-go . # Run with environment variables docker run -p 8080:8080 \ -e DB_HOST=postgres \ -e DB_PORT=5432 \ -e JWT_ACCESS_SECRET_KEY=your_secret \ microservices-go

Environment Variables

# Server Configuration SERVER_PORT=8080 GO_ENV=production # Database Configuration DB_HOST=localhost DB_PORT=5432 DB_USER=postgres DB_PASSWORD=password DB_NAME=microservices_go # JWT Configuration JWT_ACCESS_SECRET_KEY=your_access_secret JWT_REFRESH_SECRET_KEY=your_refresh_secret JWT_ACCESS_TIME_MINUTE=60 JWT_REFRESH_TIME_HOUR=24

πŸ“š Documentation

🀝 Contributing

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

Development Guidelines

  • Follow Clean Architecture principles
  • Write tests for new features
  • Maintain β‰₯ 80% test coverage
  • Use conventional commit messages
  • Update documentation for API changes

πŸ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

πŸ†˜ Support

πŸ”„ Changelog

v2.0.0 (Latest)

  • βœ… Implemented Clean Architecture
  • βœ… Added comprehensive search and pagination
  • βœ… Enhanced error handling and logging
  • βœ… Improved test coverage and quality
  • βœ… Added integration tests with Cucumber
  • βœ… Updated all documentation to English
  • βœ… Added architecture diagrams and flow charts

v1.0.0

  • βœ… Initial microservices structure
  • βœ… Basic CRUD operations
  • βœ… JWT authentication
  • βœ… PostgreSQL integration