# ๐Ÿ“š GoPrint Service General - Project Documentation ## ๐Ÿ“‹ Deskripsi Proyek Service-General adalah microservice berbasis Go yang menyediakan REST API dan gRPC untuk manajemen data person/pasien dengan integrasi ke sistem kesehatan Indonesia (BPJS & SatuSehat). ## ๐Ÿ—๏ธ Technical Architecture Project ini mengimplementasikan **Clean Architecture** dengan **Domain-Driven Design (DDD)**: - **Transport Layer**: REST API (Gin) + gRPC - **Application Layer**: Business logic (UseCases) - **Domain Layer**: Entities + Business rules - **Infrastructure Layer**: Database, Cache, External services ### Multi-Database Support Mendukung 5 jenis database sekaligus dengan connection pooling dan read replicas: - PostgreSQL (Primary) - MySQL - SQL Server - MongoDB - SQLite ## ๐Ÿ“ Project Structure ```text service-general/ โ”œโ”€โ”€ cmd/api/main.go # Entry point aplikasi โ”œโ”€โ”€ internal/ # Business logic (Clean Architecture) โ”‚ โ”œโ”€โ”€ person/ # Person/patient domain โ”‚ โ”‚ โ”œโ”€โ”€ dto.go # Data Transfer Objects โ”‚ โ”‚ โ”œโ”€โ”€ entity.go # Domain entities โ”‚ โ”‚ โ”œโ”€โ”€ mapper.go # Object mappers โ”‚ โ”‚ โ”œโ”€โ”€ repository.go # Repository interface & implementation โ”‚ โ”‚ โ””โ”€โ”€ service.go # Business service โ”‚ โ”œโ”€โ”€ auth/ # Authentication domain โ”‚ โ”œโ”€โ”€ master/ # Master data domain โ”‚ โ””โ”€โ”€ infrastructure/ # Infrastructure layer โ”‚ โ”œโ”€โ”€ cache/ # Cache management โ”‚ โ”œโ”€โ”€ config/ # Configuration โ”‚ โ”œโ”€โ”€ database/ # Database connections โ”‚ โ””โ”€โ”€ transport/ # HTTP & gRPC transport โ”œโ”€โ”€ pkg/ # Shared packages โ”‚ โ”œโ”€โ”€ errors/ # Error handling system โ”‚ โ”œโ”€โ”€ logger/ # Logging system โ”‚ โ””โ”€โ”€ utils/query/ # Powerful query builder โ”œโ”€โ”€ scripts/ # Utility scripts โ”œโ”€โ”€ docs/ # Documentation โ””โ”€โ”€ tools/ # Code generation tools ``` ## ๐Ÿ“ฆ Dependencies ### Core Dependencies ``` github.com/gin-gonic/gin v1.10.1 # REST API Framework github.com/google/uuid v1.6.0 # UUID Generator golang.org/x/crypto v0.44.0 # Cryptography golang.org/x/sync v0.18.0 # Sync utilities gorm.io/driver/postgres v1.5.11 # PostgreSQL Driver ``` ### Database Drivers ``` gorm.io/driver/mysql v1.6.0 # MySQL Driver gorm.io/driver/sqlite v1.6.0 # SQLite Driver gorm.io/driver/sqlserver v1.6.3 # SQL Server Driver go.mongodb.org/mongo-driver v1.17.6 # MongoDB Driver github.com/jmoiron/sqlx v1.4.0 # SQL Extensions ``` ### Utilities ``` github.com/go-playground/validator/v10 v10.27.0 # Input Validation github.com/golang/protobuf v1.5.4 # Protocol Buffers github.com/rs/zerolog v1.34.0 # Structured Logging github.com/swaggo/gin-swagger v1.6.1 # Swagger Integration google.golang.org/grpc v1.78.0 # gRPC Framework ``` ## ๐Ÿ”— API Endpoints ### REST API Base - **Base URL**: `http://localhost:8080/api/v1` - **Swagger UI**: `http://localhost:8080/swagger/index.html` ### Person Endpoints - `GET /persons` - List persons with pagination - `GET /persons/:id` - Get person detail - `POST /persons` - Create new person - `PUT /persons/:id` - Update person - `DELETE /persons/:id` - Soft delete person - `GET /persons/search` - Search with filters ### gRPC Services - **Port**: 50051 (default) - **Reflection**: Enabled untuk development - **Proto Files**: Tersedia di `docs/api/` ## โš™๏ธ Environment Configuration ### Configuration in config.yaml ```yaml server: port: 8080 mode: debug read_timeout: 10 write_timeout: 10 databases: postgres: type: postgres host: 10.10.123.206 port: 5432 username: postgres password: your_db_password database: health sslmode: disable max_open_conns: 25 max_idle_conns: 25 conn_max_lifetime: 5m ``` ## ๐Ÿ—„๏ธ Database Schema Overview ### Person Entity (Core) ```go type Person struct { Id int64 // Primary key Name string // Nama lengkap BirthDate *time.Time // Tanggal lahir BirthRegency_Code *string // Kode kabupaten (6 digit) Gender_Code *string // L/P (Laki-laki/Perempuan) ResidentIdentityNumber *string // NIK (16 digit) Religion_Code *string // Kode agama Education_Code *string // Kode pendidikan Occupation_Code *string // Kode pekerjaan MaritalStatus_Code *string // Kode status marital } ``` ### Related Entities - **PersonAddress**: Multiple addresses per person - **PersonContact**: Contact information (email, phone) - **PersonInsurance**: Insurance company data - **PersonRelative**: Family/relative information ## ๐Ÿ“‹ Business Rules & Validation ### Person Validation Rules ```go Name string `json:"name" binding:"required,min=2"` BirthRegency_Code string `json:"birth_regency_code" validate:"omitempty,len=6"` Gender_Code string `json:"gender_code" validate:"omitempty,oneof=L P"` ResidentIdentityNumber string `json:"resident_identity_number" validate:"omitempty,len=16"` Village_Code string `json:"village_code" validate:"required,len=10"` ``` ### Key Validation Rules: - **Name**: Required, minimum 2 characters - **NIK**: 16 digits (optional) - **Gender**: L/P only (Laki-laki/Perempuan) - **Birth Regency**: 6 digits code - **Village Code**: 10 digits code (for addresses) - **Email**: Valid email format (for contacts) ## ๐Ÿ”— Integration Points ### BPJS Integration ```yaml bpjs: base_url: https://apijkn.bpjs-kesehatan.go.id cons_id: 5257 user_key: your_bpjs_user_key secret_key: your_bpjs_secret_key timeout: 30s ``` ### SatuSehat Integration ```yaml satu_sehat: org_id: your_orgid fasyakes_id: your_fasyakes_id client_id: your_client_id client_secret: your_client_secret auth_url: https://api-satusehat.kemkes.go.id/oauth2/v1 base_url: https://api-satusehat.kemkes.go.id/fhir-r4/v1 ``` ## ๐Ÿ› ๏ธ Development Commands ### Setup & Run ```bash # Install dependencies go mod download # Run development server make run # atau go run cmd/api/main.go ``` ### Build & Test ```bash # Build binary make build # atau ./scripts/build.sh # Run tests make test # atau go test ./... # Database migration ./scripts/migrate.sh # Generate proto files ./scripts/generate_proto.sh ``` ## ๐Ÿ” Security Features - JWT Authentication dengan multiple providers - Rate limiting dengan Redis - CORS protection - Input validation & sanitization - SQL injection prevention - Audit trail untuk semua perubahan data ## ๐Ÿ“Š Performance Features - Connection pooling untuk database - Query optimization dengan index - Caching strategy (Redis) - Read replicas support - Soft delete untuk data retention ## ๐Ÿงช Testing Strategy - Unit testing untuk business logic - Integration testing untuk API - External service mocking - Load testing capabilities ## ๐Ÿš€ Deployment Options - Docker support (dev & prod) - Environment-based configuration - Health checks & monitoring - Graceful shutdown - Multi-stage build ## ๐Ÿ“š Documentation - Swagger/OpenAPI documentation - gRPC service definitions - Code comments & examples - Postman collections - Architecture diagrams ## ๐Ÿ”ฎ Future Enhancements - Event sourcing untuk audit trail - CQRS implementation - Multi-tenant support - Advanced analytics - AI/ML integration untuk data analytics --- **Generated on**: $(date) **Version**: 1.0.0 **Go Version**: $(go version | cut -d' ' -f3) **Last Updated**: $(date +%Y-%m-%d) ``` Sekarang saya juga akan update script context.sh untuk membuatnya lebih lengkap: ```bash:/home/meninjar/goprint/service-general/scripts/context.sh #!/bin/bash # Script untuk generate project context secara lengkap # Usage: ./scripts/context.sh [options] set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_DIR="$(dirname "$SCRIPT_DIR")" OUTPUT_FILE="$PROJECT_DIR/PROJECT_CONTEXT.md" echo "๐Ÿš€ Generating Service-General Project Context..." # Fungsi untuk generate header generate_header() { cat << 'EOF' # SERVICE-GENERAL PROJECT CONTEXT ## ๐Ÿ“‹ Project Overview Service-General adalah microservice berbasis Go yang menyediakan REST API dan gRPC untuk manajemen data person/pasien dengan integrasi ke sistem kesehatan Indonesia (BPJS & SatuSehat). ## ๐ŸŽฏ Business Domain - **Patient Management**: CRUD lengkap untuk data pasien - **Health Insurance**: Integrasi dengan BPJS Kesehatan - **National Health Platform**: Integrasi dengan SatuSehat (FHIR R4) - **Master Data**: Manajemen data master (agama, pendidikan, pekerjaan, dll) ## ๐Ÿ—๏ธ Technical Architecture ### Clean Architecture + Domain-Driven Design - **Transport Layer**: REST API (Gin) + gRPC - **Application Layer**: Business logic (UseCases) - **Domain Layer**: Entities + Business rules - **Infrastructure Layer**: Database, Cache, External services ### Multi-Database Support - PostgreSQL (primary) - MySQL - SQL Server - MongoDB - SQLite EOF } # Fungsi untuk generate struktur directory generate_directory_structure() { echo "## ๐Ÿ“ Project Structure" echo '```' if command -v tree >/dev/null 2>&1; then tree -L 3 -I 'tmp|vendor|.git|node_modules|*.log' "$PROJECT_DIR" 2>/dev/null | head -50 else find "$PROJECT_DIR" -type d -not -path "*/tmp/*" -not -path "*/.git/*" | head -30 fi echo '```' } # Fungsi untuk generate dependencies list generate_dependencies() { echo "## ๐Ÿ“ฆ Dependencies" echo "### Core Dependencies" grep -E '^[[:space:]]*github.com/' "$PROJECT_DIR/go.mod" | head -10 echo "" echo "### Database Drivers" grep -E 'postgres|mysql|mongo|sqlite|sqlserver' "$PROJECT_DIR/go.mod" echo "" echo "### Security & Validation" grep -E 'validator|crypto|jwt|auth' "$PROJECT_DIR/go.mod" } # Fungsi untuk generate business rules dari DTO generate_business_rules() { echo "## ๐Ÿ“‹ Business Rules & Validation" if [ -f "$PROJECT_DIR/internal/person/dto.go" ]; then echo "### Person Validation Rules" echo '```go' grep -E "validate:|binding:" "$PROJECT_DIR/internal/person/dto.go" | head -15 echo '```' echo "" echo "### Key Validation Rules:" echo "- **Name**: Required, minimum 2 characters" echo "- **NIK**: 16 digits (optional)" echo "- **Gender**: L/P only (Laki-laki/Perempuan)" echo "- **Birth Regency**: 6 digits code" echo "- **Village Code**: 10 digits code (for addresses)" echo "- **Email**: Valid email format (for contacts)" fi } # Fungsi untuk generate database schema overview generate_database_schema() { echo "## ๐Ÿ—„๏ธ Database Schema Overview" if [ -f "$PROJECT_DIR/internal/person/entity.go" ]; then echo "### Person Entity (Core)" echo '```go' # Ambil struct definition sed -n '/type Person struct {/,/^}/p' "$PROJECT_DIR/internal/person/entity.go" | head -20 echo '```' echo "" echo "### Related Entities:" echo "- **PersonAddress**: Multiple addresses per person" echo "- **PersonContact**: Contact information (email, phone)" echo "- **PersonInsurance**: Insurance company data" echo "- **PersonRelative**: Family/relative information" fi } # Fungsi untuk generate integration points generate_integrations() { echo "## ๐Ÿ”— Integration Points" if [ -f "$PROJECT_DIR/config.yaml" ]; then echo "### BPJS Integration" echo '```yaml' grep -A 6 "bpjs:" "$PROJECT_DIR/config.yaml" 2>/dev/null || echo "BPJS configuration not found" echo '```' echo "" echo "### SatuSehat Integration" echo '```yaml' grep -A 8 "satu_sehat:" "$PROJECT_DIR/config.yaml" 2>/dev/null || echo "SatuSehat configuration not found" echo '```' fi } # Fungsi untuk generate API endpoints dari code analysis generate_api_endpoints() { echo "## ๐Ÿ”— API Endpoints" echo "### REST API Base" echo "- **Base URL**: \`http://localhost:8080/api/v1\`" echo "- **Swagger UI**: \`http://localhost:8080/swagger/index.html\`" echo "" echo "### Person Endpoints" echo "- \`GET /persons\` - List persons with pagination" echo "- \`GET /persons/:id\` - Get person detail" echo "- \`POST /persons\` - Create new person" echo "- \`PUT /persons/:id\` - Update person" echo "- \`DELETE /persons/:id\` - Soft delete person" echo "- \`GET /persons/search\` - Search with filters" echo "" echo "### Auth Endpoints" echo "- \`POST /auth/login\` - User login" echo "- \`POST /auth/refresh\` - Refresh token" echo "- \`POST /auth/logout\` - User logout" echo "" echo "### gRPC Services" echo "- **Port**: 50051 (default)" echo "- **Reflection**: Enabled untuk development" echo "- **Proto Files**: Tersedia di \`docs/api/\`" } # Fungsi untuk generate environment configuration generate_env_config() { echo "## โš™๏ธ Environment Configuration" if [ -f "$PROJECT_DIR/.env.example" ]; then echo "### Environment Variables (.env.example)" echo '```bash' cat "$PROJECT_DIR/.env.example" echo '```' else echo "### Configuration in config.yaml" echo '```yaml' grep -A 10 "server:" "$PROJECT_DIR/config.yaml" 2>/dev/null || echo "Server config not found" echo '```' fi } # Fungsi untuk generate development commands generate_dev_commands() { echo "## ๐Ÿ› ๏ธ Development Commands" echo "### Setup & Run" echo '```bash' echo "# Install dependencies" echo "go mod download" echo "" echo "# Run development server" echo "make run" echo "# atau" echo "go run cmd/api/main.go" echo '```' echo "" echo "### Build & Test" echo '```bash' echo "# Build binary" echo "make build" echo "# atau" echo "./scripts/build.sh" echo "" echo "# Run tests" echo "make test" echo "# atau" echo "go test ./..." echo "" echo "# Database migration" echo "./scripts/migrate.sh" echo "" echo "# Generate proto files" echo "./scripts/generate_proto.sh" echo '```' } # Fungsi untuk generate security features generate_security_features() { echo "## ๐Ÿ” Security Features" echo "- JWT Authentication dengan multiple providers (JWT, Keycloak, Static)" echo "- Rate limiting dengan Redis (default: 60 requests/minute)" echo "- CORS protection dengan configurable origins" echo "- Input validation & sanitization menggunakan go-playground/validator" echo "- SQL injection prevention dengan parameterized queries" echo "- Audit trail untuk semua perubahan data" echo "- Soft delete untuk data retention" echo "- Security headers (XSS, CSRF protection)" } # Fungsi untuk generate performance features generate_performance_features() { echo "## ๐Ÿ“Š Performance Features" echo "- Connection pooling untuk database (max 25 connections)" echo "- Query optimization dengan proper indexing" echo "- Caching strategy menggunakan Redis" echo "- Read replicas support untuk load balancing" echo "- Soft delete untuk mempertahankan performa query" echo "- Pagination untuk semua list endpoints" echo "- Timeout configuration untuk external services (30s default)" } # Fungsi untuk generate testing strategy generate_testing_strategy() { echo "## ๐Ÿงช Testing Strategy" echo "- Unit testing untuk business logic di setiap domain" echo "- Integration testing untuk API endpoints" echo "- External service mocking untuk BPJS dan SatuSehat" echo "- Load testing capabilities untuk performance validation" echo "- Test coverage target: >80%" } # Fungsi untuk generate deployment info generate_deployment_info() { echo "## ๐Ÿš€ Deployment Options" echo "### Docker Support" echo "- **Development**: \`docker-compose -f docker-compose.dev.yml up\`" echo "- **Production**: \`docker-compose -f docker-compose.prod.yml up\`" echo "" echo "### Environment Variables" echo "- Database configuration" echo "- JWT secret dan auth settings" echo "- External service credentials (BPJS, SatuSehat)" echo "- Rate limiting configuration" echo "- Logging level dan format" } # Generate complete context generate_complete_context() { generate_header > "$OUTPUT_FILE" echo "" >> "$OUTPUT_FILE" generate_directory_structure >> "$OUTPUT_FILE" echo "" >> "$OUTPUT_FILE" generate_dependencies >> "$OUTPUT_FILE" echo "" >> "$OUTPUT_FILE" generate_api_endpoints >> "$OUTPUT_FILE" echo "" >> "$OUTPUT_FILE" generate_env_config >> "$OUTPUT_FILE" echo "" >> "$OUTPUT_FILE" generate_database_schema >> "$OUTPUT_FILE" echo "" >> "$OUTPUT_FILE" generate_business_rules >> "$OUTPUT_FILE" echo "" >> "$OUTPUT_FILE" generate_integrations >> "$OUTPUT_FILE" echo "" >> "$OUTPUT_FILE" generate_dev_commands >> "$OUTPUT_FILE" echo "" >> "$OUTPUT_FILE" generate_security_features >> "$OUTPUT_FILE" echo "" >> "$OUTPUT_FILE" generate_performance_features >> "$OUTPUT_FILE" echo "" >> "$OUTPUT_FILE" generate_testing_strategy >> "$OUTPUT_FILE" echo "" >> "$OUTPUT_FILE" generate_deployment_info >> "$OUTPUT_FILE" # Tambahkan closing section cat >> "$OUTPUT_FILE" << EOF ## ๐Ÿ“š Additional Documentation - **API Documentation**: Swagger/OpenAPI di \`/swagger/index.html\` - **gRPC Documentation**: Tersedia di \`docs/api/grpc_docs.md\` - **Postman Collection**: \`person.postman_collection.json\` - **Architecture Diagrams**: Implementasi Clean Architecture + DDD ## ๐Ÿ”ฎ Future Enhancements - Event sourcing untuk audit trail yang lebih baik - CQRS (Command Query Responsibility Segregation) implementation - Multi-tenant support untuk beberapa organisasi - Advanced analytics dan reporting - AI/ML integration untuk data analytics dan prediksi - Service mesh integration untuk microservices - Advanced caching strategies (Redis Cluster) ## ๐Ÿ“Š Project Metrics - **Go Version**: $(go version 2>/dev/null || echo "Go not installed") - **Module**: service-general - **Architecture**: Clean Architecture + DDD - **API Types**: REST + gRPC - **Databases**: 5 types (PostgreSQL, MySQL, SQL Server, MongoDB, SQLite) - **External Integrations**: BPJS Kesehatan, SatuSehat Platform - **Security**: JWT, Rate Limiting, CORS, Input Validation --- **Generated on**: $(date) **Version**: 1.0.0 **Last Updated**: $(date +%Y-%m-%d) **Generator**: Service-General Context Script EOF echo "โœ… Project context generated successfully!" echo "๐Ÿ“„ File created: $OUTPUT_FILE" echo "๐Ÿ“Š Context includes:" echo " โœ… Project structure and architecture" echo " โœ… Dependencies and technology stack" echo " โœ… API endpoints and business rules" echo " โœ… Database schema overview" echo " โœ… Integration points (BPJS & SatuSehat)" echo " โœ… Development commands and deployment" echo " โœ… Security and performance features" echo " โœ… Testing strategy and future enhancements" } # Main execution main() { cd "$PROJECT_DIR" case "${1:-}" in --help|-h) echo "Usage: $0 [options]" echo "Options:" echo " --help, -h Show this help message" echo " --generate Generate complete project context (default)" echo " --structure Show directory structure only" echo " --deps Show dependencies only" echo " --api Show API endpoints only" echo " --rules Show business rules only" echo " --security Show security features only" echo " --performance Show performance features only" ;; --generate) generate_complete_context ;; --structure) generate_directory_structure ;; --deps) generate_dependencies ;; --api) generate_api_endpoints ;; --rules) generate_business_rules ;; --security) generate_security_features ;; --performance) generate_performance_features ;; *) generate_complete_context ;; esac } # Run main function main "$@" echo "โœจ Context generation completed!" ```