Dashboard Role Implementation Tasks
0. Cập nhật triển khai (2026-04-26)
Trạng thái sau lần triển khai gần nhất:
- ✅ Task 0.1: Chuẩn hóa role enum backend/JWT claim và frontend decode fail-closed.
- ✅ Task 0.2: Tạo
DashboardModule+ 5 endpoint skeleton theo role. - ✅ Task 0.3: Bổ sung dashboard resources + migration permission role dashboard.
- ✅ Task 0.4: Implement
DashboardPermissionService(technical ticket scope đang placeholder theo plan). - ✅ Task 0.5: Frontend
DashboardRoute+ role routing + redirect/->/dashboard. - ✅ Task 0.6: Tách navigation theo role,
SidebarMenuchỉ resolve/render. - ✅ Task 0.7: Tách service/hook/type boundary cho 5 dashboard role.
- ✅ Task 1.1: Implement aggregate Owner dashboard backend theo
farmIdđược resolve từ permission service. - ✅ Task 1.2: Implement aggregate Staff dashboard backend theo danh sách pond được giao.
- ✅ Task 1.3: Implement UI Owner dashboard với đầy đủ section, loading/error/empty state.
- ✅ Task 1.4: Implement UI Staff dashboard mobile-first, ưu tiên checklist/quick action/urgent alert.
Các phần chưa làm trong update này:
- ✅ Task 3.1: Implement aggregate Super Admin dashboard backend theo system scope.
- ✅ Task 3.2: Implement UI Super Admin dashboard SaaS Control Center.
- ✅ Task 4.1: Ticket & Maintenance backend module foundation (entity, status lifecycle, customer/internal types, migration).
- ✅ Task 4.2: Backend Technical dashboard aggregate.
- ✅ Task 4.3: Frontend Technical dashboard UI.
- ✅ Task 4.4: Super Admin ticket/technical workload integration (real ticket counts, workload data).
- ✅ Task 1.5 (integration verification end-to-end theo demo accounts và data visibility) đã DONE và chốt biên bản.
1. Mục tiêu
Tài liệu này tách nhỏ docs/dashboard-role-architecture-plan.md thành các task có thể giao cho dev triển khai theo phase.
Quyết định đã chốt:
- Backend role dùng enum:
SUPER_ADMIN,ADMIN,OWNER,STAFF,TECHNICAL. - User chỉ có một role active.
- Owner quản lý đúng một farm.
- Technical được tạo internal ticket.
- Redis chỉ thêm sau khi có số đo hiệu năng.
- Route
/redirect về/dashboard.
Quy ước chung cho mọi task:
- Dùng Bun, không dùng
npm/yarn. - Dùng Biome, không chạy ESLint/Prettier trực tiếp.
- Không dùng
any; dùngunknownhoặc type rõ. - Frontend import bằng alias
@/. - Sau khi hoàn thành task phải chạy
bun run checktừ root. - Task backend phải có unit test hoặc controller/service test tương ứng nếu có logic mới.
- Task frontend route/menu phải có test cho behavior chính.
2. Phase 0: Foundation
Mục tiêu: dựng boundary dashboard theo role trước khi build UI thật.
Task 0.1: Chuẩn hóa role enum backend và JWT claim
Owner gợi ý: Backend dev.
Phụ thuộc: Không.
Phạm vi file dự kiến:
backend/src/auth/*backend/src/roles/*backend/src/rbac/*backend/src/common/enums/*backend/src/database/seeds/*backend/src/migrations/*frontend/src/lib/permissions.tsfrontend/src/stores/auth.store.ts
Nội dung:
- Chuẩn hóa role backend thành enum
SUPER_ADMIN,ADMIN,OWNER,STAFF,TECHNICAL. - JWT chỉ trả một role active.
- Không trả role dạng display label như
Super Admin. - Frontend decode role enum chuẩn.
- Nếu JWT có role không hợp lệ hoặc nhiều role, frontend fail-closed.
Acceptance Criteria:
- Login demo user trả JWT có đúng một role enum.
decodeJwtRole()chỉ nhận role thuộc enum chuẩn.- Role display label không còn là source of truth trong routing/permission.
- Tests cover role decode hợp lệ, role không hợp lệ, payload nhiều role.
bun run checkpass.
Task 0.2: Tạo DashboardModule backend skeleton
Owner gợi ý: Backend dev.
Phụ thuộc: Task 0.1.
Phạm vi file dự kiến:
backend/src/dashboard/dashboard.module.tsbackend/src/dashboard/dashboard.controller.tsbackend/src/dashboard/dashboard-permission.service.tsbackend/src/dashboard/dashboard-query.service.tsbackend/src/dashboard/dto/*.tsbackend/src/dashboard/services/*.tsbackend/src/app.module.ts
Nội dung:
- Tạo module dashboard riêng, không mở rộng thêm logic vào
reports. - Tạo 5 endpoint skeleton:
GET /dashboard/super-adminGET /dashboard/adminGET /dashboard/ownerGET /dashboard/staffGET /dashboard/technical
- Endpoint trả typed empty response hợp lệ để frontend integration sớm.
- Không import Redis ở phase này.
Acceptance Criteria:
DashboardModuleđược import vàoAppModule.- 5 endpoint tồn tại và yêu cầu JWT.
- Response có
generatedAt,scope,kpis, và section object/list rỗng theo role. - Không endpoint nào dùng
any. - Controller tests verify unauthenticated request bị reject.
bun run checkpass.
Task 0.3: Thêm dashboard permissions và seed/migration
Owner gợi ý: Backend dev.
Phụ thuộc: Task 0.1, Task 0.2.
Phạm vi file dự kiến:
backend/src/common/enums/resource.enum.tsbackend/src/database/seeds/demo-data.seed.tsbackend/src/migrations/*backend/src/rbac/*
Nội dung:
- Thêm resource:
DASHBOARD,TICKET,MAINTENANCE,AUDIT,SYSTEM_HEALTH. - Seed permission:
dashboard:read:systemdashboard:read:organizationdashboard:read:ownticket:read:systemticket:read:organizationticket:read:ownticket:update:ownmaintenance:read:systemmaintenance:update:ownaudit:read:systemaudit:read:organizationsystem-health:read:system
- Gán permission dashboard cho role tương ứng.
Acceptance Criteria:
SUPER_ADMINcódashboard:read:system.ADMINcódashboard:read:organization.OWNER,STAFF,TECHNICALcódashboard:read:own.- Permission seed idempotent, chạy lại không tạo duplicate.
- Migration/seed không làm mất permission cũ.
bun run checkpass.
Task 0.4: Implement dashboard permission/scope service
Owner gợi ý: Backend dev.
Phụ thuộc: Task 0.2, Task 0.3.
Phạm vi file dự kiến:
backend/src/dashboard/dashboard-permission.service.tsbackend/src/dashboard/dashboard-permission.service.spec.ts- Các repository/entity liên quan owner farm và staff pond assignment.
Nội dung:
- Implement:
assertRole(currentUser, allowedRoles).getOrganizationIdOrThrow(currentUser).getOwnerFarmId(currentUser).getStaffAssignedPondIds(currentUser).getTechnicalAssignedTicketIds(currentUser).assertFarmInOrganization(farmId, organizationId).assertPondAssignedToStaff(pondId, userId).assertTicketAssignedToTechnical(ticketId, userId).assertInternalTicketCreatedByTechnical(ticketId, userId).
- Nếu Ticket module chưa có, technical ticket methods có thể trả empty list có comment rõ.
Acceptance Criteria:
- Role sai bị throw
ForbiddenException. - Owner không có farm bị throw hoặc trả empty response có kiểm soát theo quyết định service.
- Owner chỉ resolve được một
farmId. - Staff chỉ resolve pond được giao.
- Technical không resolve ticket của technical khác.
- Unit tests cover success và forbidden cases.
bun run checkpass.
Task 0.5: Frontend DashboardRoute và role routing
Owner gợi ý: Frontend dev.
Phụ thuộc: Task 0.1.
Phạm vi file dự kiến:
frontend/src/pages/dashboard/DashboardRoute.tsxfrontend/src/pages/dashboard/dashboard-role.tsfrontend/src/pages/dashboard/dashboard.routes.tsxfrontend/src/pages/dashboard/index.tsfrontend/src/App.tsxfrontend/src/pages/dashboard/*.spec.tsx
Nội dung:
- Tạo dashboard role enum frontend đồng bộ backend.
- Route
/dashboardrender đúng dashboard lazy theo role. - Route
/redirect/dashboard. - Nếu role missing/invalid/multiple roles: hiển thị forbidden/invalid state.
- Tạo placeholder dashboard cho 5 role nếu UI thật chưa có.
Acceptance Criteria:
/redirect/dashboard.SUPER_ADMINrenderSuperAdminDashboard.ADMINrenderAdminDashboard.OWNERrenderOwnerDashboard.STAFFrenderStaffDashboard.TECHNICALrenderTechnicalDashboard.- Invalid role không render dashboard nào.
- Tests cover role mapping và redirect
/. bun run checkpass.
Task 0.6: Tách navigation config theo role
Owner gợi ý: Frontend dev.
Phụ thuộc: Task 0.5.
Phạm vi file dự kiến:
frontend/src/navigation/nav.types.tsfrontend/src/navigation/nav-resolver.tsfrontend/src/navigation/permission-visibility.tsfrontend/src/navigation/menus/super-admin.menu.tsxfrontend/src/navigation/menus/admin.menu.tsxfrontend/src/navigation/menus/owner.menu.tsxfrontend/src/navigation/menus/staff.menu.tsxfrontend/src/navigation/menus/technical.menu.tsxfrontend/src/components/layouts/SidebarMenu.tsx
Nội dung:
- Đưa menu config ra khỏi
SidebarMenu. SidebarMenuchỉ lấy role/permissions, resolve menu, render AntDMenu.- Menu theo role đúng với
docs/dashboard-role-architecture-plan.md. - Permission filter vẫn áp dụng sau role menu.
Acceptance Criteria:
SidebarMenu.tsxkhông còn chứa toàn bộNAV_ITEMSlớn.- Super Admin thấy menu SaaS/system.
- Admin thấy menu organization/multi-farm.
- Owner thấy menu farm operation.
- Staff thấy menu mobile/field-work scope.
- Technical thấy menu ticket/device/service report.
- Item bị thiếu permission không hiển thị.
- Tests cover resolver theo role và permission.
bun run checkpass.
Task 0.7: Tách frontend dashboard service/hook/type boundary
Owner gợi ý: Frontend dev.
Phụ thuộc: Task 0.2, Task 0.5.
Phạm vi file dự kiến:
frontend/src/services/dashboard/*.tsfrontend/src/hooks/dashboard/*.tsfrontend/src/types/dashboard/*.tsfrontend/src/pages/dashboard/shared/*
Nội dung:
- Tạo services cho 5 endpoint dashboard.
- Tạo hooks TanStack Query cho 5 role.
- Tạo shared dashboard types và role-specific response types.
- Không mở rộng
report.service.tscho role dashboard mới.
Acceptance Criteria:
- Mỗi role có service/hook/type riêng.
- Query keys bao gồm role và scope phù hợp.
- Hooks có
staleTimemặc định, chưa dùng Redis assumption. - Không type inline trong JSX.
- Không dùng
any. bun run checkpass.
3. Phase 1: Owner và Staff Dashboard
Mục tiêu: phục vụ vận hành farm hằng ngày.
Task 1.1: Backend Owner dashboard aggregate
Owner gợi ý: Backend dev.
Phụ thuộc: Task 0.4.
Phạm vi file dự kiến:
backend/src/dashboard/services/owner-dashboard.service.tsbackend/src/dashboard/dto/owner-dashboard-response.dto.tsbackend/src/dashboard/presenters/owner-dashboard.presenter.tsbackend/src/dashboard/dashboard-query.service.tsbackend/src/dashboard/services/owner-dashboard.service.spec.ts
Nội dung:
- Aggregate dashboard cho một
farmIdduy nhất của Owner. - Sections:
- Farm overview.
- Pond status.
- Today tasks.
- Staff performance.
- Pond attention list.
- Environment summary.
- Feed/growth summary.
- Farm device status.
- Incident reports.
Acceptance Criteria:
- Owner endpoint không nhận tùy tiện
farmIdtừ query để vượt scope. - Response chỉ chứa dữ liệu của một farm owner quản lý.
- Nếu owner chưa có farm, response empty state hợp lệ, không 500.
- KPI tính bằng aggregate query hoặc query giới hạn, không load toàn bộ dữ liệu không cần thiết.
- Service tests cover owner đúng farm và owner không có farm.
bun run checkpass.
Task 1.2: Backend Staff dashboard aggregate
Owner gợi ý: Backend dev.
Phụ thuộc: Task 0.4.
Phạm vi file dự kiến:
backend/src/dashboard/services/staff-dashboard.service.tsbackend/src/dashboard/dto/staff-dashboard-response.dto.tsbackend/src/dashboard/presenters/staff-dashboard.presenter.tsbackend/src/dashboard/dashboard-query.service.tsbackend/src/dashboard/services/staff-dashboard.service.spec.ts
Nội dung:
- Aggregate dashboard cho pond/task được giao cho Staff.
- Sections:
- Today checklist.
- My ponds.
- Quick log entry options.
- Urgent alerts.
- Incident report state.
- Work history.
Acceptance Criteria:
- Staff endpoint không trả dữ liệu pond không được giao.
- Staff response không chứa cost/revenue/FCR admin report.
- Today checklist sort theo priority và time.
- Empty assigned ponds trả empty state hợp lệ.
- Service tests cover assigned pond và forbidden cross-pond.
bun run checkpass.
Task 1.3: Frontend Owner dashboard UI
Owner gợi ý: Frontend dev.
Phụ thuộc: Task 1.1, Task 0.7.
Phạm vi file dự kiến:
frontend/src/pages/dashboard/owner/OwnerDashboard.tsxfrontend/src/pages/dashboard/owner/components/*.tsxfrontend/src/pages/dashboard/owner/hooks/useOwnerDashboard.tsfrontend/src/types/dashboard/owner-dashboard.types.ts
Nội dung:
- Render Owner dashboard sections từ API.
- Reuse shared components:
KpiGrid,DashboardSection,DashboardTableCard. - Có loading/error/empty states.
- Không import component từ dashboard role khác.
Acceptance Criteria:
- Owner thấy Farm Overview, Pond Status, Today Tasks, Staff Performance, Pond Attention, Environment Summary, Feed/Growth, Device Status, Incident Reports.
- Khi API loading hiển thị skeleton.
- Khi API empty hiển thị empty state dễ hiểu.
- Không render organization-level hoặc SaaS-level data.
- Component tests cover successful render và empty state.
bun run checkpass.
Task 1.4: Frontend Staff dashboard UI mobile-first
Owner gợi ý: Frontend dev.
Phụ thuộc: Task 1.2, Task 0.7.
Phạm vi file dự kiến:
frontend/src/pages/dashboard/staff/StaffDashboard.tsxfrontend/src/pages/dashboard/staff/components/*.tsxfrontend/src/pages/dashboard/staff/hooks/useStaffDashboard.tsfrontend/src/types/dashboard/staff-dashboard.types.ts
Nội dung:
- Render Staff dashboard mobile-first.
- Ưu tiên checklist, quick log, urgent alerts.
- Ít chart, nút lớn, trạng thái rõ.
Acceptance Criteria:
- Staff thấy Today Checklist, My Ponds, Quick Log Entry, Urgent Alerts, Incident Report, Work History.
- Layout usable ở mobile width.
- Không render cost/revenue/admin report/business sensitive metrics.
- Quick action buttons dẫn đúng route hoặc disabled rõ nếu route chưa có.
- Component tests cover checklist order và sensitive section absence.
bun run checkpass.
Task 1.5: Owner/Staff dashboard integration verification
Owner gợi ý: QA/dev.
Phụ thuộc: Task 1.1, Task 1.2, Task 1.3, Task 1.4.
Phạm vi:
- Demo login.
- Dashboard routes.
- API responses.
Nội dung:
- Kiểm tra demo Owner và Staff vào đúng dashboard.
- Kiểm tra data visibility.
- Kiểm tra số request và loading behavior.
Acceptance Criteria:
- Owner login vào
/dashboardthấy Owner dashboard. - Staff login vào
/dashboardthấy Staff dashboard. - Staff không thể gọi Owner/Admin/SuperAdmin dashboard endpoint thành công.
- Owner không thể xem Staff dashboard của user khác.
- Dashboard initial load không gọi endpoint của role khác.
bun run checkpass.
4. Phase 2: Admin Dashboard
Mục tiêu: Admin quản lý toàn Organization và nhiều Farm.
Task 2.1: Backend Admin dashboard aggregate
Owner gợi ý: Backend dev.
Phụ thuộc: Phase 0, Task 1 backend nếu dùng shared queries.
Phạm vi file dự kiến:
backend/src/dashboard/services/admin-dashboard.service.tsbackend/src/dashboard/dto/admin-dashboard-response.dto.tsbackend/src/dashboard/presenters/admin-dashboard.presenter.tsbackend/src/dashboard/dashboard-query.service.tsbackend/src/dashboard/services/admin-dashboard.service.spec.ts
Nội dung:
- Aggregate dashboard theo
currentUser.organizationId. - Sections:
- Organization overview.
- Farm performance table.
- Farm ranking.
- Alert center.
- Organization device summary.
- Data intervention queue.
- Owner/staff activity.
- Reports snapshot.
Acceptance Criteria:
- Admin endpoint chỉ trả dữ liệu trong organization của Admin.
- Không nhận
organizationIdtừ query để đổi tenant. - Farm performance có pagination hoặc limit rõ.
- Device summary không bao gồm device chưa assign cho organization.
- Data intervention queue có audit-ready fields: issue type, target, suggested action, detected time.
- Service tests cover cross-organization isolation.
bun run checkpass.
Task 2.2: Frontend Admin dashboard UI
Owner gợi ý: Frontend dev.
Phụ thuộc: Task 2.1, Task 0.7.
Phạm vi file dự kiến:
frontend/src/pages/dashboard/admin/AdminDashboard.tsxfrontend/src/pages/dashboard/admin/components/*.tsxfrontend/src/pages/dashboard/admin/hooks/useAdminDashboard.tsfrontend/src/types/dashboard/admin-dashboard.types.ts
Nội dung:
- Render Organization Command Center cho Admin.
- Bảng Farm Performance là section trung tâm.
- Có filters farm/status nếu API hỗ trợ.
Acceptance Criteria:
- Admin thấy Organization Overview, Farm Performance, Farm Ranking, Alert Center, Device Summary, Data Intervention Queue, Owner/Staff Activity, Reports Snapshot.
- Bảng lớn có pagination hoặc visible limit.
- Không render Super Admin system health/audit toàn hệ thống.
- Không render Owner-only staff assignment action nếu Admin không có route/action tương ứng.
- Component tests cover table render và empty state.
bun run checkpass.
Task 2.3: Admin data correction action boundary
Owner gợi ý: Backend + Frontend dev.
Phụ thuộc: Task 2.1, Task 2.2.
Phạm vi file dự kiến:
backend/src/dashboard/services/admin-dashboard.service.tsbackend/src/audit/*nếu audit module đã có hoặc placeholder spec.frontend/src/pages/dashboard/admin/components/DataInterventionQueue.tsx
Nội dung:
- Data Intervention Queue chỉ hiển thị action đã có route/permission.
- Các action nhạy cảm như correct data phải có audit requirement rõ.
- Nếu mutation chưa implement, UI chỉ cho view/request correction/mark reviewed placeholder disabled.
Acceptance Criteria:
- Không có action sửa dữ liệu trực tiếp nếu chưa có audit log.
- Action disabled phải có tooltip/lý do rõ.
- Backend response đủ metadata để tạo audit sau này.
bun run checkpass.
5. Phase 3: Super Admin Dashboard
Mục tiêu: vận hành SaaS multi-tenant và inventory thiết bị cấp hệ thống.
Task 3.1: Backend Super Admin dashboard aggregate
Owner gợi ý: Backend dev.
Phụ thuộc: Phase 0.
Phạm vi file dự kiến:
backend/src/dashboard/services/super-admin-dashboard.service.tsbackend/src/dashboard/dto/super-admin-dashboard-response.dto.tsbackend/src/dashboard/presenters/super-admin-dashboard.presenter.tsbackend/src/dashboard/dashboard-query.service.tsbackend/src/dashboard/services/super-admin-dashboard.service.spec.ts
Nội dung:
- Aggregate system-level dashboard.
- Sections:
- SaaS overview.
- Organization health.
- Device inventory lifecycle.
- Device issues.
- Ticket & maintenance summary.
- Technical workload.
- System health.
- Audit/security feed.
Acceptance Criteria:
- Chỉ
SUPER_ADMINgọi endpoint thành công. - Không bị
OrganizationFilterInterceptorfilter sai system-level data. - Organization health có pagination/limit.
- Device inventory dùng aggregate count/group by, không load toàn bộ device.
- Nếu ticket/audit/system health module chưa có, response trả partial section có
warnings, không 500. - Service tests cover Super Admin success và Admin forbidden.
bun run checkpass.
Task 3.2: Frontend Super Admin dashboard UI
Owner gợi ý: Frontend dev.
Phụ thuộc: Task 3.1, Task 0.7.
Phạm vi file dự kiến:
frontend/src/pages/dashboard/super-admin/SuperAdminDashboard.tsxfrontend/src/pages/dashboard/super-admin/components/*.tsxfrontend/src/pages/dashboard/super-admin/hooks/useSuperAdminDashboard.tsfrontend/src/types/dashboard/super-admin-dashboard.types.ts
Nội dung:
- Render SaaS Control Center.
- Ưu tiên system/tenant/device/ticket visibility.
- Không reuse Farm dashboard layout.
Acceptance Criteria:
- Super Admin thấy SaaS Overview, Organization Health, Device Inventory, Device Issues, Ticket Maintenance, Technical Workload, System Health, Audit Security.
- Bảng Organization/Device/Ticket có pagination hoặc limit.
- Partial unavailable sections hiển thị warning/empty state rõ.
- Không render farm operation task/checklist như Owner/Staff.
- Component tests cover partial response và successful render.
bun run checkpass.
6. Phase 4: Ticket, Maintenance và Technical Dashboard
Mục tiêu: hoàn thiện luồng bảo trì thiết bị thật.
Task 4.1: Ticket & Maintenance backend module foundation
Owner gợi ý: Backend dev.
Phụ thuộc: Task 0.3.
Phạm vi file dự kiến:
backend/src/maintenance/*hoặcbackend/src/tickets/*backend/src/migrations/*backend/src/common/enums/resource.enum.tsbackend/src/database/seeds/*
Nội dung:
- Tạo entity và lifecycle ticket:
NewTriagedAssignedAcceptedOn The WayIn ProgressWaiting PartsWaiting CustomerResolvedVerifiedClosedCancelled
- Hỗ trợ customer ticket và internal technical ticket.
- Internal ticket có type riêng, ví dụ
INTERNAL_MAINTENANCE.
Acceptance Criteria:
- Migration tạo ticket tables cần thiết.
- Ticket có organization/farm/pond/device nullable theo loại ticket.
- Customer ticket không do Technical tự tạo thay mặt khách hàng.
- Internal ticket gắn
createdByTechnicalId. - Status/priority enum có validation.
- Tests cover create internal ticket và reject invalid status transition cơ bản.
bun run checkpass.
Task 4.2: Backend Technical dashboard aggregate
Owner gợi ý: Backend dev.
Phụ thuộc: Task 4.1, Task 0.4.
Phạm vi file dự kiến:
backend/src/dashboard/services/technical-dashboard.service.tsbackend/src/dashboard/dto/technical-dashboard-response.dto.tsbackend/src/dashboard/presenters/technical-dashboard.presenter.tsbackend/src/dashboard/dashboard-query.service.tsbackend/src/dashboard/services/technical-dashboard.service.spec.ts
Nội dung:
- Aggregate Technical dashboard.
- Sections:
- Assigned ticket queue.
- Internal ticket queue.
- Today route.
- Device diagnostics.
- Parts needed.
- Maintenance history.
- Service report state.
Acceptance Criteria:
- Technical chỉ thấy ticket được giao và internal ticket tự tạo.
- Technical không thấy cost/revenue/FCR/survival/staff performance/daily log detail.
- Device diagnostics chỉ cho device liên quan ticket scope.
- Today route chỉ chứa visit từ ticket scope.
- Tests cover assigned ticket, internal ticket, forbidden ticket của technical khác.
bun run checkpass.
Task 4.3: Frontend Technical dashboard UI
Owner gợi ý: Frontend dev.
Phụ thuộc: Task 4.2, Task 0.7.
Phạm vi file dự kiến:
frontend/src/pages/dashboard/technical/TechnicalDashboard.tsxfrontend/src/pages/dashboard/technical/components/*.tsxfrontend/src/pages/dashboard/technical/hooks/useTechnicalDashboard.tsfrontend/src/types/dashboard/technical-dashboard.types.ts
Nội dung:
- Render Maintenance Dashboard cho Technical.
- Có action tạo internal ticket.
- Không hiển thị business data.
Acceptance Criteria:
- Technical thấy My Ticket Queue, Internal Tickets, Today Route, Device Diagnostics, Parts Needed, Maintenance History, Service Report.
- Button tạo internal ticket chỉ tạo loại internal ticket.
- Không có section chi phí, FCR, sản lượng, staff performance.
- Empty assigned tickets vẫn hiển thị internal ticket action.
- Component tests cover absence of sensitive metrics.
bun run checkpass.
Task 4.4: Super Admin ticket/technical workload integration
Owner gợi ý: Backend + Frontend dev.
Phụ thuộc: Task 3.1, Task 3.2, Task 4.1.
Phạm vi file dự kiến:
backend/src/dashboard/services/super-admin-dashboard.service.tsfrontend/src/pages/dashboard/super-admin/components/TicketMaintenanceTable.tsxfrontend/src/pages/dashboard/super-admin/components/TechnicalWorkloadTable.tsx
Nội dung:
- Super Admin dashboard hiển thị ticket toàn hệ thống và workload technical.
- Có SLA/overdue/critical counts.
Acceptance Criteria:
- Super Admin thấy open/overdue/critical ticket counts.
- Technical workload không leak business farm metrics.
- Ticket table có status, priority, SLA, assigned technical.
- Query có limit/pagination.
- Tests cover counts và role isolation.
bun run checkpass.
7. Phase 5: Performance, hardening và cleanup
Mục tiêu: đo hiệu năng, tối ưu, dọn legacy endpoint nếu cần.
Task 5.1: Performance instrumentation
Owner gợi ý: Backend + Frontend dev.
Phụ thuộc: Các dashboard chính đã có data thật.
Phạm vi file dự kiến:
- Backend dashboard services.
- Frontend dashboard hooks.
- Docs/runbook nếu repo có monitoring guide.
Nội dung:
- Log hoặc expose timing cho dashboard aggregate queries.
- Ghi lại số request khi vào
/dashboard. - Đo bundle chunk từng role.
- Xác định block cần polling ngắn.
Acceptance Criteria:
- Có số đo response time cho 5 endpoint dashboard.
- Có số đo số request initial load theo role.
- Có số đo bundle chunk role dashboard.
- Có quyết định rõ block nào cần polling và interval bao nhiêu.
- Chưa thêm Redis nếu số đo chưa chứng minh cần.
bun run checkpass.
Task 5.2: Redis cache decision và implementation nếu cần
Owner gợi ý: Backend dev.
Phụ thuộc: Task 5.1.
Phạm vi file dự kiến:
backend/src/dashboard/dashboard-cache.service.tsbackend/src/dashboard/services/*.tsbackend/src/redis/*
Nội dung:
- Chỉ implement Redis nếu Task 5.1 chứng minh cần.
- Cache theo role/scope/date.
- TTL khác nhau theo block.
- Invalidate hoặc bypass cache cho dữ liệu nhạy realtime nếu cần.
Acceptance Criteria:
- Có documented reason vì sao cần Redis.
- Cache key chứa scope: system, organizationId, farmId, userId/date.
- Không cache response cross-user sai scope.
- Có tests cho cache hit/miss hoặc mock cache behavior.
- Nếu không cần Redis, task đóng với quyết định “defer” và số đo kèm theo.
bun run checkpass.
Task 5.3: Legacy dashboard endpoint cleanup
Owner gợi ý: Backend + Frontend dev.
Phụ thuộc: Frontend đã dùng endpoint role-specific.
Phạm vi file dự kiến:
backend/src/reports/dashboard.controller.tsbackend/src/reports/dashboard.service.tsfrontend/src/hooks/useReports.tsfrontend/src/services/report.service.ts
Nội dung:
- Xác định consumer còn dùng
/dashboard/overview,/dashboard/farm-stats,/dashboard/device-status. - Nếu còn dùng cho reports legacy, giữ và đánh dấu rõ.
- Nếu không còn dùng, deprecate hoặc migrate sang reports-specific endpoint.
Acceptance Criteria:
- Không có frontend role dashboard nào gọi endpoint legacy.
- Nếu endpoint legacy giữ lại, Swagger/API docs ghi rõ purpose.
- Nếu remove endpoint, tests và imports liên quan được cập nhật.
bun run checkpass.
Task 5.4: End-to-end role access verification
Owner gợi ý: QA/dev.
Phụ thuộc: Phase 1-4.
Phạm vi:
- Demo users.
- Dashboard endpoints.
- Frontend route/menu.
Nội dung:
- Verify toàn bộ role từ login đến dashboard/menu/API.
- Kiểm tra fail-closed cho role invalid/multiple role.
- Kiểm tra cross-role endpoint forbidden.
Acceptance Criteria:
SUPER_ADMINvào đúng dashboard và không bị org filter sai.ADMINchỉ thấy organization của mình.OWNERchỉ thấy một farm của mình.STAFFchỉ thấy pond/task được giao.TECHNICALchỉ thấy assigned ticket và internal ticket tự tạo./redirect/dashboardcho mọi role.- Menu đúng theo role và permission.
- Không dashboard nào fetch endpoint của role khác khi initial load.
bun run checkpass.
8. Task dependency summary
Thứ tự khuyến nghị:
- Task 0.1.
- Task 0.2 và Task 0.3.
- Task 0.4.
- Task 0.5, Task 0.6, Task 0.7.
- Task 1.1 và Task 1.2.
- Task 1.3 và Task 1.4.
- Task 1.5.
- Task 2.1, Task 2.2, Task 2.3.
- Task 3.1, Task 3.2.
- Task 4.1, Task 4.2, Task 4.3, Task 4.4.
- Task 5.1.
- Task 5.2 nếu cần Redis.
- Task 5.3.
- Task 5.4.
Parallelization gợi ý:
- Sau Task 0.2 có thể cho frontend làm placeholders và service boundary song song với backend permissions.
- Owner backend và Staff backend có thể làm song song nếu đã có scope service.
- Owner UI và Staff UI có thể làm song song sau khi DTO contract chốt.
- Admin UI có thể bắt đầu bằng mock typed response sau khi DTO contract Admin chốt.
- Super Admin UI có thể làm song song với backend nếu partial response contract đã ổn định.
9. Definition of Ready cho từng task
Một task sẵn sàng giao dev khi:
- Có phase và task id rõ.
- Có dependencies đã hoàn thành hoặc được mock bằng typed contract.
- Có phạm vi file dự kiến.
- Có API/DTO contract nếu task chạm frontend-backend.
- Có Acceptance Criteria cụ thể.
- Có test expectation rõ.
10. Definition of Done cho từng task
Một task được xem là done khi:
- Code hoặc docs thay đổi đúng phạm vi.
- Acceptance Criteria pass.
- Tests cần thiết đã thêm/cập nhật.
- Không dùng
any. - Không dùng import relative
../trong frontend. - Không làm lộ dữ liệu ngoài scope role.
bun run checkpass từ root.- Dev ghi lại endpoint/route/menu affected trong PR description.