docs(18-02): complete plan — analytics consolidated into admin dashboard
This commit is contained in:
@@ -0,0 +1,113 @@
|
||||
---
|
||||
phase: 18-cleanup-consolidamento
|
||||
plan: "02"
|
||||
subsystem: ui
|
||||
tags: [nextjs, analytics, dashboard, react, tailwind]
|
||||
|
||||
# Dependency graph
|
||||
requires:
|
||||
- phase: analytics-queries
|
||||
provides: getAnalyticsByYear, getMonthlyCollected, getAvailableYears, getTimeByClient, getTotalTrackedHours
|
||||
provides:
|
||||
- Admin dashboard at /admin integrates annual statistics (MetricCard, MonthlyChart, time tracking per client)
|
||||
- /admin/analytics route deleted — returns 404
|
||||
- YearSelector navigates to /admin?year=Y
|
||||
affects: [18-cleanup-consolidamento, admin-ui, analytics]
|
||||
|
||||
# Tech tracking
|
||||
tech-stack:
|
||||
added: []
|
||||
patterns:
|
||||
- Server page accepts searchParams for year filtering
|
||||
- Analytics queries co-located with dashboard queries in same async page
|
||||
|
||||
key-files:
|
||||
created: []
|
||||
modified:
|
||||
- src/app/admin/page.tsx
|
||||
- src/components/admin/YearSelector.tsx
|
||||
deleted:
|
||||
- src/app/admin/analytics/page.tsx
|
||||
|
||||
key-decisions:
|
||||
- "Unified fmtEur to accept number (analytics version); KPI card callers wrapped with parseFloat() for string DB values"
|
||||
- "Two separate awaits in AdminDashboard: getDashboardStats() first, then analytics Promise.all — acceptable for clarity"
|
||||
- "Stale .next cache (OfferSelector.tsx reference) cleared before final build — pre-existing issue, not introduced by this plan"
|
||||
|
||||
patterns-established:
|
||||
- "Statistics section appended after activity feed — existing dashboard structure preserved above new section"
|
||||
|
||||
requirements-completed:
|
||||
- CLEAN-03
|
||||
|
||||
# Metrics
|
||||
duration: 15min
|
||||
completed: 2026-06-19
|
||||
---
|
||||
|
||||
# Phase 18 Plan 02: Consolidate Analytics Dashboard Summary
|
||||
|
||||
**Merged /admin/analytics statistics (MetricCard, MonthlyChart, per-client time tracking) into /admin dashboard and deleted the duplicate route**
|
||||
|
||||
## Performance
|
||||
|
||||
- **Duration:** ~15 min
|
||||
- **Started:** 2026-06-19T10:04:00Z
|
||||
- **Completed:** 2026-06-19T10:19:00Z
|
||||
- **Tasks:** 2
|
||||
- **Files modified:** 3 (2 modified, 1 deleted)
|
||||
|
||||
## Accomplishments
|
||||
- AdminDashboard now shows annual statistics section below activity feed: MetricCard economic metrics, MonthlyChart, and per-client time tracking bars
|
||||
- /admin/analytics route deleted — navigating there returns 404
|
||||
- YearSelector updated to navigate to /admin?year=Y instead of /admin/analytics?year=Y
|
||||
- fmtEur unified to number-accepting version (more robust); existing KPI card string values wrapped with parseFloat()
|
||||
|
||||
## Task Commits
|
||||
|
||||
1. **Task 1: Integra statistiche annuali nella Dashboard** — included in `14bdbab` (feat)
|
||||
2. **Task 2: Elimina rotta /admin/analytics** — included in `14bdbab` (feat)
|
||||
|
||||
**Plan metadata:** (docs commit below)
|
||||
|
||||
## Files Created/Modified
|
||||
- `src/app/admin/page.tsx` — Added analytics imports, searchParams, analytics queries, MetricCard, fmtSeconds, fmtEur(number), statistics section
|
||||
- `src/components/admin/YearSelector.tsx` — Updated router.push from /admin/analytics to /admin
|
||||
- `src/app/admin/analytics/page.tsx` — Deleted
|
||||
|
||||
## Decisions Made
|
||||
- Unified `fmtEur` to the `number` version from analytics (cleaner, no `parseFloat` internally). Updated the two KPI card callers that received string values from DB to pass `parseFloat(kpi.revenueTotale)` and `parseFloat(kpi.pagamentiInSospeso)`.
|
||||
- Used two sequential awaits (getDashboardStats first, then analytics Promise.all) rather than one large combined Promise.all — avoids mixing query concerns and follows plan guidance for acceptable two-await pattern.
|
||||
- Preserved all existing dashboard content (FollowUpWidget, KPI cards, activity feed) exactly; statistics section appended at the bottom with `mt-10`.
|
||||
|
||||
## Deviations from Plan
|
||||
|
||||
### Auto-fixed Issues
|
||||
|
||||
**1. [Rule 3 - Blocking] Cleared stale .next cache referencing deleted OfferSelector.tsx**
|
||||
- **Found during:** Build verification after Task 2
|
||||
- **Issue:** Stale `.next/tsconfig.tsbuildinfo` incremental cache listed `src/components/admin/quotes/OfferSelector.tsx` as a root file. That file had been deleted in a prior session. TypeScript errored with "File not found — root file specified for compilation." The pre-existing cache was masking this because prior builds hit cached output.
|
||||
- **Fix:** Ran `rm -rf .next` to clear the stale incremental cache, then rebuilt clean.
|
||||
- **Files modified:** .next/ (cache only — not tracked in git)
|
||||
- **Verification:** Clean build passes with TypeScript check and all routes compiled correctly.
|
||||
- **Committed in:** n/a (cache not committed)
|
||||
|
||||
---
|
||||
|
||||
**Total deviations:** 1 auto-fixed (Rule 3 - blocking)
|
||||
**Impact on plan:** Required to get a clean build. Pre-existing issue unrelated to this plan's scope. .next/ is gitignored so no source changes.
|
||||
|
||||
## Issues Encountered
|
||||
- Stale `.next` incremental TypeScript cache referenced `OfferSelector.tsx` (deleted in a prior session). Cleared cache, rebuilt clean. Build passes correctly.
|
||||
|
||||
## User Setup Required
|
||||
None - no external service configuration required.
|
||||
|
||||
## Next Phase Readiness
|
||||
- /admin is the single analytics entry point — ready for 18-03 and any future admin UI work
|
||||
- No stale routes remain in the analytics path
|
||||
- Build is clean
|
||||
|
||||
---
|
||||
*Phase: 18-cleanup-consolidamento*
|
||||
*Completed: 2026-06-19*
|
||||
Reference in New Issue
Block a user