Architecture Overview - Lumina-Enterprise-Solutions/prism-auth-service GitHub Wiki

🏗️ Architecture Overview

prism-auth-service dirancang menggunakan arsitektur berlapis (layered architecture) yang bersih untuk memisahkan tanggung jawab (separation of concerns), meningkatkan kemudahan pengujian, dan skalabilitas.

Diagram Arsitektur

graph TD
    %% Styling definitions
    classDef external fill:#e1f5fe,stroke:#0277bd,stroke-width:2px,color:#000
    classDef handler fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px,color:#000
    classDef service fill:#e8f5e8,stroke:#388e3c,stroke-width:2px,color:#000
    classDef repository fill:#fff3e0,stroke:#f57c00,stroke-width:2px,color:#000
    classDef client fill:#fce4ec,stroke:#c2185b,stroke-width:2px,color:#000
    classDef database fill:#f1f8e9,stroke:#689f38,stroke-width:2px,color:#000
    classDef cache fill:#ffebee,stroke:#d32f2f,stroke-width:2px,color:#000
    classDef vault fill:#f9fbe7,stroke:#827717,stroke-width:2px,color:#000
    classDef main fill:#e3f2fd,stroke:#1976d2,stroke-width:3px,color:#000
    classDef microservice fill:#f8bbd9,stroke:#e91e63,stroke-width:2px,color:#000

    %% External Layer
    subgraph EXT ["🌐 External World"]
        direction TB
        Frontend["📱 Frontend/Mobile App<br/>• Login/logout interface<br/>• Token management<br/>• Session handling"]
        OtherServices["🔗 Other Microservices<br/>• Service-to-service auth<br/>• Token validation<br/>• User impersonation"]
    end

    %% Main Application Entry Point
    subgraph MAIN ["🔐 prism-auth-service"]
        direction TB
        MainGo["📋 main.go<br/>• Server initialization<br/>• Configuration loading<br/>• Dependency injection<br/>• Graceful shutdown"]
        
        %% Handler Layer
        subgraph HANDLER ["🎯 Handler Layer"]
            direction LR
            HTTPHandlers["🌐 HTTP Handlers<br/>internal/handler<br/>• REST endpoints<br/>• Login/logout/refresh<br/>• Request validation<br/>• Response formatting"]
            GRPCServer["⚡ gRPC Server<br/>internal/grpc_server<br/>• Service authentication<br/>• Token validation<br/>• User verification<br/>• Interceptors"]
        end
        
        %% Service Layer
        subgraph SERVICE ["🧠 Service Layer (Business Logic)"]
            direction TB
            AuthService["🔑 Auth Service<br/>internal/service<br/>• JWT token generation<br/>• Password validation<br/>• Session management<br/>• Authentication logic<br/>• Token refresh<br/>• User authorization"]
        end
        
        %% Repository Layer
        subgraph REPO ["💾 Repository Layer (Data Access)"]
            direction TB
            Repositories["📊 Repositories<br/>internal/repository<br/>• User credential storage<br/>• Session persistence<br/>• Token blacklisting<br/>• Audit logging<br/>• Database transactions"]
        end
        
        %% Client Layer
        subgraph CLIENT ["🔌 Client Layer (External Communication)"]
            direction TB
            ServiceClients["📡 Service Clients<br/>internal/client<br/>• HTTP client wrapper<br/>• gRPC client connections<br/>• Circuit breaker pattern<br/>• Retry mechanisms<br/>• Request/response logging"]
        end
    end

    %% Dependencies & External Services
    subgraph DEPS ["🔧 Dependencies"]
        direction TB
        PostgresDB["🐘 PostgreSQL DB<br/>• User credentials<br/>• Session storage<br/>• Audit trails<br/>• ACID compliance"]
        RedisCache["🔴 Redis Cache<br/>• Session storage<br/>• Token blacklist<br/>• Rate limiting<br/>• Temporary data"]
        UserServiceExt["👤 prism-user-service<br/>• User profile data<br/>• User validation<br/>• Account management"]
        NotificationServiceExt["📢 prism-notification-service<br/>• Login notifications<br/>• Security alerts<br/>• Authentication events"]
        VaultService["🔐 HashiCorp Vault<br/>• JWT signing keys<br/>• Database credentials<br/>• API secrets<br/>• Encryption keys"]
    end

    %% Connections with labels
    Frontend -- "🌐 REST API<br/>Login/Logout<br/>Token Management" --> HTTPHandlers
    OtherServices -- "⚡ gRPC Calls<br/>Token Validation<br/>User Authentication" --> GRPCServer
    
    MainGo --> HTTPHandlers
    MainGo --> GRPCServer
    MainGo -- "🔑 Load Secrets<br/>JWT Keys<br/>DB Credentials" --> VaultService
    
    HTTPHandlers --> AuthService
    GRPCServer --> AuthService
    
    AuthService --> Repositories
    AuthService --> ServiceClients
    
    Repositories --> PostgresDB
    Repositories --> RedisCache
    
    ServiceClients -- "👤 HTTP/gRPC Out<br/>User Validation<br/>Profile Data" --> UserServiceExt
    ServiceClients -- "📢 HTTP/gRPC Out<br/>Security Notifications<br/>Login Alerts" --> NotificationServiceExt

    %% Apply styles
    class Frontend,OtherServices external
    class HTTPHandlers,GRPCServer handler
    class AuthService service
    class Repositories repository
    class ServiceClients client
    class PostgresDB database
    class RedisCache cache
    class VaultService vault
    class MainGo main
    class UserServiceExt,NotificationServiceExt microservice

Loading

Penjelasan Lapisan (Layers)

1. Titik Masuk (Entrypoint - main.go)

main.go adalah titik awal aplikasi. Tanggung jawab utamanya adalah:

  • Inisialisasi: Memuat konfigurasi, menginisialisasi logger, dan menyiapkan OpenTelemetry untuk tracing.
  • Dependency Injection:
    • Membuat koneksi ke database (PostgreSQL) dan Redis.
    • Membuat klien untuk layanan eksternal (Vault, user-service, notification-service).
    • Menginstansiasi semua lapisan (repository, service, handler) dan menyuntikkan dependensi yang diperlukan.
  • Server Setup: Menjalankan server HTTP (Gin) dan server gRPC di goroutine terpisah.
  • Graceful Shutdown: Menangani sinyal OS (SIGINT, SIGTERM) untuk mematikan semua koneksi dan server dengan aman.

2. Lapisan Handler (internal/handler & internal/grpc_server)

Lapisan ini adalah gerbang masuk untuk permintaan dari dunia luar.

  • internal/handler: Berisi AuthHandler dan APIKeyHandler. Mereka bertanggung jawab untuk:
    • Mendefinisikan rute HTTP.
    • Menerima permintaan HTTP, mem-binding, dan memvalidasi payload JSON.
    • Memanggil metode yang sesuai di lapisan Service.
    • Mengonversi hasil dari lapisan Service menjadi respons JSON.
  • internal/grpc_server: Berisi AuthServer. Ini adalah implementasi dari service gRPC yang didefinisikan di file .proto. Fungsinya mirip dengan handler HTTP tetapi untuk komunikasi antar-layanan yang lebih cepat.

3. Lapisan Service (internal/service)

Ini adalah inti dari aplikasi yang berisi semua logika bisnis.

  • AuthService: Mengorkestrasi semua proses bisnis seperti registrasi, login, pembuatan token, validasi 2FA, dan manajemen API key.
  • Lapisan ini tidak tahu-menahu tentang HTTP atau gRPC. Ia menerima data dalam bentuk struct Go dan mengembalikan struct atau error.
  • Lapisan ini berinteraksi dengan lapisan Repository untuk operasi data dan lapisan Client untuk berkomunikasi dengan layanan lain.

4. Lapisan Repository (internal/repository)

Lapisan ini bertanggung jawab untuk semua interaksi dengan penyimpanan data (database dan cache).

  • Tanggung Jawab: Abstraksi query SQL dan perintah Redis. Setiap repository (misalnya, TokenRepository, APIKeyRepository) mendefinisikan sebuah interface dan implementasi spesifik (misalnya, postgresTokenRepository).
  • Ini memastikan bahwa lapisan Service tidak perlu tahu tentang detail implementasi database.

5. Lapisan Client (internal/client)

Lapisan ini bertanggung jawab untuk berkomunikasi dengan microservices lain atau layanan pihak ketiga.

  • UserServiceClient: Wrapper untuk klien gRPC yang berkomunikasi dengan prism-user-service untuk mengambil atau membuat data pengguna.
  • NotificationClient: Klien HTTP sederhana yang mengirim permintaan ke prism-notification-service untuk mengirim email (misalnya, email selamat datang atau reset password).

Kembali ke Halaman Utama

⚠️ **GitHub.com Fallback** ⚠️