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, SidebarMenu chỉ 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ùng unknown hoặc type rõ.
  • Frontend import bằng alias @/.
  • Sau khi hoàn thành task phải chạy bun run check từ 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.ts
  • frontend/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 check pass.

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.ts
  • backend/src/dashboard/dashboard.controller.ts
  • backend/src/dashboard/dashboard-permission.service.ts
  • backend/src/dashboard/dashboard-query.service.ts
  • backend/src/dashboard/dto/*.ts
  • backend/src/dashboard/services/*.ts
  • backend/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-admin
    • GET /dashboard/admin
    • GET /dashboard/owner
    • GET /dashboard/staff
    • GET /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ào AppModule.
  • 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 check pass.

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.ts
  • backend/src/database/seeds/demo-data.seed.ts
  • backend/src/migrations/*
  • backend/src/rbac/*

Nội dung:

  • Thêm resource: DASHBOARD, TICKET, MAINTENANCE, AUDIT, SYSTEM_HEALTH.
  • Seed permission:
    • dashboard:read:system
    • dashboard:read:organization
    • dashboard:read:own
    • ticket:read:system
    • ticket:read:organization
    • ticket:read:own
    • ticket:update:own
    • maintenance:read:system
    • maintenance:update:own
    • audit:read:system
    • audit:read:organization
    • system-health:read:system
  • Gán permission dashboard cho role tương ứng.

Acceptance Criteria:

  • SUPER_ADMINdashboard:read:system.
  • ADMINdashboard:read:organization.
  • OWNER, STAFF, TECHNICALdashboard: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 check pass.

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.ts
  • backend/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 check pass.

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.tsx
  • frontend/src/pages/dashboard/dashboard-role.ts
  • frontend/src/pages/dashboard/dashboard.routes.tsx
  • frontend/src/pages/dashboard/index.ts
  • frontend/src/App.tsx
  • frontend/src/pages/dashboard/*.spec.tsx

Nội dung:

  • Tạo dashboard role enum frontend đồng bộ backend.
  • Route /dashboard render đú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_ADMIN render SuperAdminDashboard.
  • ADMIN render AdminDashboard.
  • OWNER render OwnerDashboard.
  • STAFF render StaffDashboard.
  • TECHNICAL render TechnicalDashboard.
  • Invalid role không render dashboard nào.
  • Tests cover role mapping và redirect /.
  • bun run check pass.

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.ts
  • frontend/src/navigation/nav-resolver.ts
  • frontend/src/navigation/permission-visibility.ts
  • frontend/src/navigation/menus/super-admin.menu.tsx
  • frontend/src/navigation/menus/admin.menu.tsx
  • frontend/src/navigation/menus/owner.menu.tsx
  • frontend/src/navigation/menus/staff.menu.tsx
  • frontend/src/navigation/menus/technical.menu.tsx
  • frontend/src/components/layouts/SidebarMenu.tsx

Nội dung:

  • Đưa menu config ra khỏi SidebarMenu.
  • SidebarMenu chỉ lấy role/permissions, resolve menu, render AntD Menu.
  • 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.tsx không còn chứa toàn bộ NAV_ITEMS lớ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 check pass.

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/*.ts
  • frontend/src/hooks/dashboard/*.ts
  • frontend/src/types/dashboard/*.ts
  • frontend/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.ts cho 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ó staleTime mặc định, chưa dùng Redis assumption.
  • Không type inline trong JSX.
  • Không dùng any.
  • bun run check pass.

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.ts
  • backend/src/dashboard/dto/owner-dashboard-response.dto.ts
  • backend/src/dashboard/presenters/owner-dashboard.presenter.ts
  • backend/src/dashboard/dashboard-query.service.ts
  • backend/src/dashboard/services/owner-dashboard.service.spec.ts

Nội dung:

  • Aggregate dashboard cho một farmId duy 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 farmId từ 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 check pass.

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.ts
  • backend/src/dashboard/dto/staff-dashboard-response.dto.ts
  • backend/src/dashboard/presenters/staff-dashboard.presenter.ts
  • backend/src/dashboard/dashboard-query.service.ts
  • backend/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 check pass.

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.tsx
  • frontend/src/pages/dashboard/owner/components/*.tsx
  • frontend/src/pages/dashboard/owner/hooks/useOwnerDashboard.ts
  • frontend/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 check pass.

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.tsx
  • frontend/src/pages/dashboard/staff/components/*.tsx
  • frontend/src/pages/dashboard/staff/hooks/useStaffDashboard.ts
  • frontend/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 check pass.

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 /dashboard thấy Owner dashboard.
  • Staff login vào /dashboard thấ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 check pass.

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.ts
  • backend/src/dashboard/dto/admin-dashboard-response.dto.ts
  • backend/src/dashboard/presenters/admin-dashboard.presenter.ts
  • backend/src/dashboard/dashboard-query.service.ts
  • backend/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 organizationId từ 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 check pass.

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.tsx
  • frontend/src/pages/dashboard/admin/components/*.tsx
  • frontend/src/pages/dashboard/admin/hooks/useAdminDashboard.ts
  • frontend/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 check pass.

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.ts
  • backend/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 check pass.

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.ts
  • backend/src/dashboard/dto/super-admin-dashboard-response.dto.ts
  • backend/src/dashboard/presenters/super-admin-dashboard.presenter.ts
  • backend/src/dashboard/dashboard-query.service.ts
  • backend/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_ADMIN gọi endpoint thành công.
  • Không bị OrganizationFilterInterceptor filter 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 check pass.

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.tsx
  • frontend/src/pages/dashboard/super-admin/components/*.tsx
  • frontend/src/pages/dashboard/super-admin/hooks/useSuperAdminDashboard.ts
  • frontend/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 check pass.

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ặc backend/src/tickets/*
  • backend/src/migrations/*
  • backend/src/common/enums/resource.enum.ts
  • backend/src/database/seeds/*

Nội dung:

  • Tạo entity và lifecycle ticket:
    • New
    • Triaged
    • Assigned
    • Accepted
    • On The Way
    • In Progress
    • Waiting Parts
    • Waiting Customer
    • Resolved
    • Verified
    • Closed
    • Cancelled
  • 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 check pass.

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.ts
  • backend/src/dashboard/dto/technical-dashboard-response.dto.ts
  • backend/src/dashboard/presenters/technical-dashboard.presenter.ts
  • backend/src/dashboard/dashboard-query.service.ts
  • backend/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 check pass.

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.tsx
  • frontend/src/pages/dashboard/technical/components/*.tsx
  • frontend/src/pages/dashboard/technical/hooks/useTechnicalDashboard.ts
  • frontend/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 check pass.

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.ts
  • frontend/src/pages/dashboard/super-admin/components/TicketMaintenanceTable.tsx
  • frontend/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 check pass.

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 check pass.

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.ts
  • backend/src/dashboard/services/*.ts
  • backend/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 check pass.

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.ts
  • backend/src/reports/dashboard.service.ts
  • frontend/src/hooks/useReports.ts
  • frontend/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 check pass.

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_ADMIN vào đúng dashboard và không bị org filter sai.
  • ADMIN chỉ thấy organization của mình.
  • OWNER chỉ thấy một farm của mình.
  • STAFF chỉ thấy pond/task được giao.
  • TECHNICAL chỉ thấy assigned ticket và internal ticket tự tạo.
  • / redirect /dashboard cho 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 check pass.

8. Task dependency summary

Thứ tự khuyến nghị:

  1. Task 0.1.
  2. Task 0.2 và Task 0.3.
  3. Task 0.4.
  4. Task 0.5, Task 0.6, Task 0.7.
  5. Task 1.1 và Task 1.2.
  6. Task 1.3 và Task 1.4.
  7. Task 1.5.
  8. Task 2.1, Task 2.2, Task 2.3.
  9. Task 3.1, Task 3.2.
  10. Task 4.1, Task 4.2, Task 4.3, Task 4.4.
  11. Task 5.1.
  12. Task 5.2 nếu cần Redis.
  13. Task 5.3.
  14. 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 check pass từ root.
  • Dev ghi lại endpoint/route/menu affected trong PR description.