Skip to main content

Arsitektur Sistem Codeverta ERP

Halaman ini menjelaskan struktur teknis, alur data, komponen infrastruktur, dan skema arsitektur yang digunakan oleh Codeverta ERP Core.


Topologi Infrastruktur​

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Client / Web Browser β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚
β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ HAProxy Router β”‚
β”‚ (TLS, Tenant Subdomain) β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β–Ό β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ apps/admin (Frontend)β”‚ β”‚ apps/backend (Gin API)β”‚
β”‚ React 19 + Vite App β”‚ β”‚ Go REST microserviceβ”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β–Ό β–Ό β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ PostgreSQL DB β”‚ β”‚ Redis Cache/Limitβ”‚ β”‚ Tencent Cloud SESβ”‚
β”‚ (Tenant Schemas) β”‚ β”‚ (Sessions & Logs)β”‚ β”‚ (Email Delivery) β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Backend Application Layer (apps/backend)​

Backend ditulis dalam bahasa Go (Golang) menggunakan framework Gin dan ORM GORM. Struktur aplikasi mengadopsi pemisahan berbasis modul:

apps/backend/
β”œβ”€β”€ cmd/ # Entrypoints tambahan & CLI helpers
β”œβ”€β”€ common/ # Redis client, Zap logger, global DB instances
β”œβ”€β”€ controller/ # Core controllers (Auth, User, Tenant, Order, Finance, dll)
β”œβ”€β”€ database/ # Database setup, GORM connection, migration engines
β”œβ”€β”€ dto/ # Data Transfer Objects untuk payload validasi
β”œβ”€β”€ middleware/ # Auth, Tenant Resolver, Rate Limiter, Audit Plugin
β”œβ”€β”€ model/ # Core GORM struct models (Tenant, User, Order, AuditLog, dll)
β”œβ”€β”€ modules/ # Isolated business domain modules
β”‚ β”œβ”€β”€ buying/ # Controller, Model, Routes untuk Pembelian
β”‚ β”œβ”€β”€ selling/ # Controller, Model, Routes untuk Penjualan & POS
β”‚ └── stock/ # Controller, Model, Routes untuk Inventoris & Stok
β”œβ”€β”€ repository/ # Data access abstractions
β”œβ”€β”€ router/ # Gin Router definitions (api-router, admin-router, crm-router, dll)
└── services/ # External service wrappers (Tencent SES, Payment Gateways, dll)

Multi-Tenancy Engine & Middleware​

1. Tenant Resolver Middleware (middleware.TenantResolver)​

  • Setiap request yang masuk ke grup API bertandatangan tenant dievaluasi oleh TenantResolver.
  • Resolver mendeteksi tenant dari header HTTP, subdomain URL, atau token klaim JWT.
  • tenant_id disimpan ke dalam gin.Context dan diinjeksikan ke dalam GORM plugin scope.

2. GORM Plugins Automatically Scoped​

  • Tenant Plugin (middleware.RegisterTenantPlugin): Menambahkan klausa filter tenant_id = ? secara otomatis pada query SELECT, UPDATE, dan DELETE.
  • Audit Plugin (middleware.RegisterAuditPlugin): Mencatat setiap perubahan data (INSERT, UPDATE, DELETE) ke tabel audit_logs secara transparan tanpa mengganggu logika bisnis.

Frontend Application Layer (apps/admin)​

Dashboard admin menggunakan React 19 yang dibundel oleh Vite:

  • State & Router: React Router v6 / Desk Navigation System.
  • Styling: Vanilla CSS Modules & Utility Classes dengan tema yang terkurasi.
  • Feature Modules: Terorganisir di src/modules/ (selling, buying, stock, crm, accounting, administration, settings).

Proxy & Routing Layer (haproxy/)​

HAProxy bertindak sebagai pintu gerbang (edge gateway) untuk perutean lalu lintas web:

  • erp.codeverta.com: Diteruskan ke container frontend apps/admin.
  • erp-api.codeverta.com: Diteruskan ke container backend apps/backend.
  • WebSocket Pass-through: Mendukung upgrade koneksi HTTP ke WebSocket untuk /api/ws/activity.