# Architecture — Database Flow > **Terakhir Diperbarui:** 2026-06-29 --- ## Database Connections ``` geonet-console Laravel │ ├── pgsql (default) → audit-postgres:5432/databaselist_app │ Metadata: ldap_user_meta, service_tokens, api_tokens, database_connections │ ├── audit → audit-postgres:5432/databaselist_audit │ Audit log: audit_logs │ ├── mssql → 10.100.1.25:1433/master │ Read-only: database registry (SQL Server) │ └── project_search → 10.100.1.25:5432/geonet_project_search Vector search index (Fase 4 — Ollama) ``` --- ## Alur Write — API Request ```mermaid sequenceDiagram participant API as API Request participant SVC as Service Layer participant PGSQL as PostgreSQL (app) participant AUDIT as PostgreSQL (audit) API->>SVC: Update LDAP user meta SVC->>PGSQL: UPDATE ldap_user_meta SET ... SVC->>AUDIT: INSERT audit_logs {actor, action, payload} PGSQL-->>SVC: OK AUDIT-->>SVC: OK SVC-->>API: 200 success ``` **Aturan:** Semua aksi write wajib log ke audit DB via `AuditLogService`. --- ## Alur Read — Database Registry ``` GET /api/v1/databases → DatabaseConnectionManager::listAll() → mssql connection → SELECT name, state FROM sys.databases → PostgreSQL (pgsql) → SELECT * FROM database_connections → merge + return ``` --- ## Vector Search (Fase 4 — Belum Aktif) ``` POST /api/v1/project-search/ask {query} → ProjectSearchService::ask() → OllamaService::embed(query) → 10.100.1.26:11434 → project_search DB → SELECT ... ORDER BY embedding <-> $vector → OllamaService::generate(context + query) → return {answer, sources} ``` --- ## Catatan Penting - `DB_CONNECTION=pgsql` di `compose.yaml` override `.env` — jangan ubah - `project_search` koneksi ke 10.100.1.25 external — migration gagal jika unreachable (non-critical) - OAuth keys ada di Docker volume `app_storage` (bukan DB) - Audit DB (`databaselist_audit`) terpisah dari app DB untuk isolasi