feat(admin): analytics dashboard

Sprint 27.

New features/admin/analytics/ module + net-new /:lang/backoffice/analytics
route + Dashboard Quick Action.

- revenue/orders/avg-order-value/sales-over-time/top-products computed by
  composing AdminOrdersLocalGateway (Sprint 23's seeded mock orders) - real
  aggregation over mock data, not a separate fabricated dataset
- products/categories counts from AdminProductsLocalGateway/
  AdminCategoriesLocalGateway
- visitors/funnels/heatmaps render pending-backend badges (no analytics
  pipeline exists anywhere in this system) rather than fabricated numbers,
  same convention as the Sprint 19 dashboard's pre-Sprint-23 Orders/Revenue
  cards
- plain div-bar chart (no charting library), 7/30/90-day range toggle,
  CSV export

docs/ADMIN.md + docs/BACKEND.md (new item 16) updated.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
sdarbinyan
2026-07-15 11:17:55 +04:00
parent a67ea17ad2
commit 88cc131fdc
11 changed files with 264 additions and 2 deletions

View File

@@ -20,6 +20,7 @@ const QUICK_ACTIONS: AdminDashboardQuickAction[] = [
{ id: 'media-library', labelKey: 'dashboard.actionMediaLibrary', route: ['backoffice', 'media'] },
{ id: 'users', labelKey: 'dashboard.actionUsers', route: ['backoffice', 'users'] },
{ id: 'monitoring', labelKey: 'dashboard.actionMonitoring', route: ['backoffice', 'monitoring'] },
{ id: 'analytics', labelKey: 'dashboard.actionAnalytics', route: ['backoffice', 'analytics'] },
{ id: 'preview-marketplace', labelKey: 'dashboard.actionPreviewMarketplace', route: [''] },
];

View File

@@ -20,6 +20,7 @@ export type AdminDashboardQuickActionId =
| 'media-library'
| 'users'
| 'monitoring'
| 'analytics'
| 'preview-marketplace';
export interface AdminDashboardQuickAction {