3645046bc0e21d040a193edb149459d0accd34ef
…
…
…
…
…
…
…
🚀 API Service - Clean Architecture
Layanan API modern dengan arsitektur bersih untuk manajemen produk, pesanan, dan otentikasi pengguna
📑 Daftar Isi
- ✨ Fitur Utama
- 🏗️ Arsitektur
- ⚡ Quick Start
- 🔐 Autentikasi
- 📊 API Endpoints
- 🛠️ Development
- 🚀 Deployment
- 📚 Dokumentasi
✨ Fitur Utama
Core Features
- 🔒 JWT Authentication - Sistem autentikasi yang aman
- 📦 CRUD Operations - Operasi lengkap untuk produk dan pesanan
- 🏥 BPJS Integration - Integrasi dengan layanan kesehatan BPJS
- 🩺 FHIR/SATUSEHAT - Dukungan standar kesehatan internasional
- 📖 API Documentation - Swagger/OpenAPI yang interaktif
Developer Experience
- 🔥 Hot Reload - Development dengan auto-restart
- 🐳 Docker Ready - Deployment yang mudah
- ⚡ Code Generator - Buat handler dan model otomatis
- 🧪 Testing Suite - Unit dan integration tests
- 📊 Health Monitoring - Monitoring kesehatan aplikasi
🏗️ Arsitektur
Clean Architecture Layers
┌─────────────────────────────────────┐
│ Presentation Layer │ ← handlers/, routes/
├─────────────────────────────────────┤
│ Application Layer │ ← middleware/, validators/
├─────────────────────────────────────┤
│ Domain Layer │ ← models/, interfaces/
├─────────────────────────────────────┤
│ Infrastructure Layer │ ← database/, external APIs
└─────────────────────────────────────┘
Struktur Project
api-service/
├── 📁 cmd/
│ └── api/main.go # 🚪 Entry point aplikasi
├── 📁 internal/ # 🏠 Core business logic
│ ├── handlers/ # 🎮 HTTP controllers (Presentation)
│ ├── middleware/ # 🛡️ Auth & validation (Application)
│ ├── models/ # 📊 Data structures (Domain)
│ ├── routes/ # 🛣️ API routing (Presentation)
│ ├── services/ # 💼 Business logic (Application)
│ └── repository/ # 💾 Data access (Infrastructure)
├── 📁 pkg/ # 💼 Package
│ ├── logger/ # 🎯 General generators
│ └── data/ # Hasil Log yang tersimpan
│ ├── utils/ # 🏥 BPJS specific tools
│ └── validator/ # 🩺 SATUSEHAT tools
├── 📁 tools/ # 🔧 Development tools
│ ├── general/ # 🎯 General generators
│ ├── bpjs/ # 🏥 BPJS specific tools
│ └── satusehat/ # 🩺 SATUSEHAT tools
├── 📁 docs/ # 📚 Documentation
├── 📁 configs/ # ⚙️ Configuration files
└── 📁 scripts/ # 📜 Automation scripts
⚡ Quick Start
1️⃣ Setup Environment (2 menit)
# Clone repository
git clone <repository-url>
cd api-service
# Setup environment
cp .env.example .env
2️⃣ Pilih Method Setup
🐳 Docker (Recommended)
make docker-run
🔧 Manual Setup
# Install dependencies
go mod download
# Run database migrations
make migrate-up
# Start server
go run cmd/api/main.go
Update Swagger
swag init -g cmd/api/main.go --parseDependency --parseInternal # Alternative
swag init -g cmd/api/main.go -o docs/
### 3️⃣ Verify Installation
| Service | URL | Status |
| :-- | :-- | :-- |
| **API** | http://localhost:8080/api/v1 | ✅ |
| **Swagger** | http://localhost:8080/swagger/index.html | 📖 |
| **Health Check** | http://localhost:8080/api/v1/health | 💚 |
***
## 🔐 Autentikasi
### Login \& Mendapatkan Token
```bash
curl -X POST http://localhost:8080/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{
"username": "admin",
"password": "password"
}'
Response:
{
"access_token": "eyJhbGciOiJIUzI1NiIs...",
"expires_in": 3600,
"user": {
"id": "123",
"username": "admin",
"role": "admin"
}
}
Menggunakan Token
curl -X GET http://localhost:8080/api/v1/products \
-H "Authorization: Bearer <your-token>"
Demo Accounts
| Username | Password | Role | Akses |
|---|---|---|---|
admin |
password |
Admin | Semua endpoint |
user |
password |
User | Read-only |
📊 API Endpoints
🌍 Public Endpoints
| Method | Endpoint | Deskripsi |
|---|---|---|
POST |
/api/v1/auth/login |
Login pengguna |
POST |
/api/v1/auth/register |
Registrasi pengguna baru |
GET |
/api/v1/health |
Status kesehatan API |
🔒 Protected Endpoints
User Management
| Method | Endpoint | Deskripsi |
|---|---|---|
GET |
/api/v1/auth/me |
Profile pengguna |
PUT |
/api/v1/auth/me |
Update profile |
Product Management
| Method | Endpoint | Deskripsi |
|---|---|---|
GET |
/api/v1/products |
List semua produk |
POST |
/api/v1/products |
Buat produk baru |
GET |
/api/v1/products/:id |
Detail produk |
PUT |
/api/v1/products/:id |
Update produk |
DELETE |
/api/v1/products/:id |
Hapus produk |
Dynamic Query (Advanced)
| Method | Endpoint | Deskripsi |
|---|---|---|
GET |
/api/v1/retribusi/dynamic |
Query dengan filter dinamis |
Contoh Query:
# Filter berdasarkan jenis
GET /api/v1/retribusi/dynamic?filter[Jenis][_eq]=RETRIBUSI PELAYANAN KESEHATAN
# Kombinasi filter
GET /api/v1/retribusi/dynamic?filter[status][_eq]=active&filter[Tarif][_gt]=100000
# Pagination dan sorting
GET /api/v1/retribusi/dynamic?sort=-date_created&limit=10&offset=20
🏥 BPJS Integration
| Method | Endpoint | Deskripsi |
|---|---|---|
GET |
/api/v1/bpjs/peserta/:no |
Data peserta BPJS |
GET |
/api/v1/bpjs/rujukan/:no |
Data rujukan |
🩺 SATUSEHAT Integration
| Method | Endpoint | Deskripsi |
|---|---|---|
GET |
/api/v1/satusehat/patient/:id |
Data pasien |
POST |
/api/v1/satusehat/encounter |
Buat encounter baru |
🛠️ Development
Code Generation (30 detik)
🎯 Generate CRUD Lengkap
# Generate handler untuk entity baru
go run tools/general/generate-handler.go product get post put delete
# Generate dengan fitur advanced
go run tools/general/generate-handler.go orders get post put delete dynamic search stats
🏥 Generate BPJS Handler
# Single service
go run tools/bpjs/generate-bpjs-handler.go tools/bpjs/reference/peserta get
# Semua service dari config
go run tools/bpjs/generate-handler.go tools/bpjs/services-config-bpjs.yaml
🩺 Generate SATUSEHAT Handler
go run tools/satusehat/generate-satusehat-handler.go tools/satusehat/services-config-satusehat.yaml patient
Development Commands
# 🔥 Development dengan hot reload
make watch
# 🧪 Testing
make test # Unit tests
make itest # Integration tests
make test-all # Semua tests
# 📖 Update dokumentasi
make docs # Generate Swagger docs
# 🔍 Code quality
make lint # Linting
make format # Format code
Environment Configuration
📁 .env File:
# Database
BLUEPRINT_DB_HOST=localhost
BLUEPRINT_DB_PORT=5432
BLUEPRINT_DB_USERNAME=postgres
BLUEPRINT_DB_PASSWORD=postgres
BLUEPRINT_DB_DATABASE=api_service
# JWT
JWT_SECRET=your-super-secret-key-change-in-production
# External APIs
BPJS_BASE_URL=https://api.bpjs-kesehatan.go.id
SATUSEHAT_BASE_URL=https://api.satusehat.kemkes.go.id
# Application
APP_ENV=development
APP_PORT=8080
LOG_LEVEL=debug
🚀 Deployment
🐳 Docker Deployment
Development:
# Start semua services
make docker-run
# Stop services
make docker-down
# Rebuild dan restart
make docker-rebuild
Production:
# Build production image
docker build -t api-service:prod .
# Run production container
docker run -d \
--name api-service \
-p 8080:8080 \
--env-file .env.prod \
api-service:prod
🔧 Manual Deployment
# Build aplikasi
make build
# Run migrations
./scripts/migrate.sh up
# Start server
./bin/api-service
📚 Dokumentasi
📖 Interactive API Documentation
Kunjungi Swagger UI di: http://localhost:8080/swagger/index.html
Cara menggunakan:
- 🔑 Login melalui
/auth/loginendpoint - 📋 Copy token dari response
- 🔓 Klik tombol "Authorize" di Swagger
- 📝 Masukkan:
Bearer <your-token> - ✅ Test semua endpoint yang tersedia
🧪 Testing Examples
JavaScript/Axios:
// Login dan set token
const auth = await axios.post('/api/v1/auth/login', {
username: 'admin',
password: 'password'
});
axios.defaults.headers.common['Authorization'] =
`Bearer ${auth.data.access_token}`;
// Fetch data
const products = await axios.get('/api/v1/products');
console.log(products.data);
cURL Examples:
# Login
TOKEN=$(curl -s -X POST http://localhost:8080/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"password"}' | jq -r '.access_token')
# Use token
curl -H "Authorization: Bearer $TOKEN" \
http://localhost:8080/api/v1/products
🔍 Health Monitoring
# Basic health check
curl http://localhost:8080/api/v1/health
# Detailed system info
curl http://localhost:8080/api/v1/health/detailed
Response:
{
"status": "healthy",
"timestamp": "2025-09-10T05:39:00Z",
"services": {
"database": "connected",
"bpjs_api": "accessible",
"satusehat_api": "accessible"
},
"version": "1.0.0"
}
🚨 Troubleshooting
Masalah Umum
❌ Database Connection Error
# Cek status PostgreSQL
make db-status
# Reset database
make db-reset
# Check logs
make logs-db
❌ Generate Handler Gagal
- ✅ Pastikan berada di root project
- ✅ Cek permission write di folder
internal/ - ✅ Verifikasi file
internal/routes/v1/routes.goexists
❌ Token Invalid/Expired
- 🔄 Login ulang untuk mendapatkan token baru
- ⏰ Token expire dalam 1 jam (configurable)
- 📝 Format harus:
Bearer <token>
❌ Import Error saat Generate
- 🧹 Jalankan:
go mod tidy - 🔄 Restart development server
- 📝 Cek format import di generated files
Debug Mode
# Enable debug logging
export LOG_LEVEL=debug
# Run dengan verbose output
make run-debug
# Monitor performance
make monitor
🎯 Next Steps
📋 Development Roadmap
- ✅ Setup environment selesai
- ✅ Generate handler pertama
- ✅ Test dengan Swagger
- 🔄 Implementasi business logic
- 🔄 Tambahkan unit tests
- 🔄 Setup CI/CD pipeline
- 🔄 Deploy ke production
🚀 Advanced Features
- 📊 Monitoring & Observability
- 🔒 Enhanced Security (Rate limiting, CORS)
- 📈 Performance Optimization
- 🌐 Multi-language Support
- 📱 Mobile SDK Integration
⚡ Total setup time: 5 menit | 🔧 Generate CRUD: 30 detik | 🧪 Testing: Langsung via Swagger
💡 Pro Tip: Gunakan
make helpuntuk melihat semua command yang tersedia
Description
Languages
Go
91.1%
HTML
8.6%
Makefile
0.1%