Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
/ 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

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月01ζ—₯T00: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月01ζ—₯T00: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

Sponsor this project

Packages

No packages published

AltStyle γ«γ‚ˆγ£γ¦ε€‰ζ›γ•γ‚ŒγŸγƒšγƒΌγ‚Έ (->γ‚ͺγƒͺγ‚ΈγƒŠγƒ«) /