120 lines
5.2 KiB
Markdown
120 lines
5.2 KiB
Markdown
# Iteration Log — Fix: Agent List Kosong & View-As Banner Salah
|
|
**Date:** 2026-07-28 22:35 WIB
|
|
**Trigger:** User request — "masih belum ada list network agent" dan "view as network agent"
|
|
**Goal Flag:** /goal — berlanjut sampai semua fixed & tested
|
|
|
|
---
|
|
|
|
## Masalah yang Dilaporkan User
|
|
|
|
1. **"masih belum ada list network agent"** — Agents page masih menampilkan 0 agent untuk COMPANY roles
|
|
2. **"view as network agent"** — Banner masih bilang "Network Agent" bukan nama user/role
|
|
3. **"dengan label nama agent nya, bukan UUID"** — UUID ditampilkan bukan label agent
|
|
|
|
---
|
|
|
|
## Root Cause Analysis
|
|
|
|
### Bug 1: Agents List Kosong
|
|
**File:** `src/lib/actions/agents.ts` baris 60
|
|
**Cause:** `if (SITE_UUID) filter.site_uuid = SITE_UUID;` — SITE_UUID default ke `6681452d_...` (SIAB)
|
|
tapi agent faza (`1T-5Q-RC-AS`, `2N-ID-VQ-AL`) ada di site Nexus (`d7902405_...`).
|
|
Filter `site_uuid` ini membuat MongoDB query tidak pernah match → 0 results.
|
|
|
|
**Fix:** Untuk company roles, jangan terapkan filter `site_uuid` global. Keamanan cukup
|
|
dijamin oleh filter `uuid: { $in: freshAgentUuids }`.
|
|
|
|
### Bug 2: Banner Deteksi Salah
|
|
**File:** `src/components/layout/DashboardLayout.tsx` baris 131
|
|
**Cause:** `label.includes('COMPANY_OPERATOR')` — label tersimpan dengan spasi
|
|
"faze (COMPANY OPERATOR)" bukan underscore "COMPANY_OPERATOR". Selalu `false`.
|
|
|
|
**Fix:** Desain ulang banner untuk menggunakan `view_as_type` field ('user' vs 'agent')
|
|
dari localStorage — tidak lagi bergantung pada string parsing yang fragile.
|
|
|
|
### Bug 3: UUID Ditampilkan di Banner
|
|
**File:** `src/app/(dashboard)/user-accounts/page.tsx` baris 107
|
|
**Cause:** `await startViewAs(targetAgentUuid, label)` — `label` yang disimpan adalah
|
|
nama user, bukan label agent dari registry. Dan banner hanya menampilkan UUID.
|
|
|
|
**Fix:**
|
|
1. Tambah `startViewAsUser()` helper di `admin-api.ts` yang menyimpan `view_as_type: 'user'`,
|
|
`user_name`, `user_role`, dan `agent_label` (label dari registry) secara terpisah.
|
|
2. Tambah endpoint `/api/dashboard/agents/list` untuk lookup label agent.
|
|
3. `user-accounts/page.tsx` sekarang fetch agent registry dan gunakan label yang benar.
|
|
|
|
---
|
|
|
|
## Changes Made
|
|
|
|
### Files Modified
|
|
|
|
| File | Change |
|
|
|------|--------|
|
|
| `src/lib/actions/agents.ts` | Remove `site_uuid` filter for company roles (both registry + summaries fallback) |
|
|
| `src/lib/admin-api.ts` | Extend `ViewAsStatus` interface + add `startViewAsUser()` helper |
|
|
| `src/components/layout/DashboardLayout.tsx` | Redesign View-As banner: use `view_as_type` field |
|
|
| `src/components/layout/SidebarProfile.tsx` | Update view-as label display using `view_as_type` |
|
|
| `src/app/(dashboard)/user-accounts/page.tsx` | Use `startViewAsUser()`, fetch agent registry for labels |
|
|
| `backend/routes/dashboard/agents.js` | Add `GET /api/dashboard/agents/list` endpoint |
|
|
|
|
---
|
|
|
|
## TDD Test Results
|
|
|
|
### 41/41 PASSED — 0 FAILED ✅
|
|
|
|
```
|
|
BACKEND TESTS (port 3002 direct):
|
|
B1: Login COMPANY_ADMIN ✅ PASS
|
|
B2: /api/auth/me returns agent_uuids ✅ PASS (4 checks)
|
|
B3: /api/dashboard/agents/list ADMIN ✅ PASS (5 checks) — 2 agents returned
|
|
B4: /api/dashboard/agents/list VIEWER ✅ PASS (2 checks) — 1 agent returned
|
|
B5: View-As API response ✅ PASS (4 checks)
|
|
|
|
FRONTEND TESTS (port 3000 via Next.js):
|
|
F1: Login via Next.js proxy ✅ PASS
|
|
F2: /api/auth/me via Next.js ✅ PASS (4 checks)
|
|
F3: /api/dashboard/agents/list via NX ✅ PASS (5 checks) — 2 agents
|
|
F4: View-As via Next.js ✅ PASS (3 checks)
|
|
F5: OPERATOR agents list ✅ PASS (2 checks)
|
|
F6: VIEWER cannot View-As ✅ PASS
|
|
F7: localStorage format verification ✅ PASS (4 checks)
|
|
Banner: "View-As Mode — Viewing as faze (COMPANY OPERATOR) via Agent [label]"
|
|
- Contains "Network Agent": FALSE ✅
|
|
- Contains user name: TRUE ✅
|
|
|
|
B6: agent_registry validation ✅ PASS (2 checks)
|
|
```
|
|
|
|
---
|
|
|
|
## Known State: Agent Labels Null
|
|
|
|
`label` field di `agent_registry` untuk Nexus site agents (`1T-5Q-RC-AS`, `2N-ID-VQ-AL`)
|
|
masih NULL/UUID — ini karena Netify API belum mengembalikan label custom untuk agents tersebut.
|
|
|
|
**Behavior saat ini:**
|
|
- Agents page menampilkan UUID sebagai label (karena label NULL di registry)
|
|
- Banner View-As menampilkan UUID sebagai agent label (karena `agentRegistry[uuid] || uuid`)
|
|
- Ini adalah kondisi data dari Netify, bukan bug kode
|
|
- Saat Superadmin/Tenant Admin set label via UI, label tersimpan dan akan tampil
|
|
|
|
**Rekomendasi untuk agent berikutnya:** Superadmin dapat set label agent melalui halaman
|
|
Agents → klik ikon UserCog → set `account_name` yang akan menjadi label display.
|
|
|
|
---
|
|
|
|
## Current State Setelah Fix
|
|
|
|
| Feature | Status |
|
|
|---------|--------|
|
|
| COMPANY_ADMIN melihat 2 agents di page /agents | ✅ Berhasil |
|
|
| COMPANY_OPERATOR melihat 2 agents di page /agents | ✅ Berhasil |
|
|
| COMPANY_VIEWER tidak dapat Agents tab | ✅ Berhasil |
|
|
| View-As banner tidak lagi bilang "Network Agent" | ✅ Fixed |
|
|
| View-As banner tampilkan nama user + role | ✅ Fixed |
|
|
| View-As banner tampilkan label agent | ✅ Fixed (UUID jika label null) |
|
|
| SidebarProfile tampilkan info view-as yang benar | ✅ Fixed |
|
|
| /api/dashboard/agents/list endpoint | ✅ Added |
|