- Fix auth.ts: login/getMe now unwrap res.data before returning
- Fix DataSource.vue: testConnection/syncMetadata use res.data.success/message
- Fix Project.vue: autoClassify uses res.data.message
- Root cause: request.ts interceptor returns full response body, auth.ts was
treating response as if it was already unwrapped
Backend:
- Add /dashboard/stats API (data_sources, tables, columns, labeled, sensitive, projects)
- Add /dashboard/distribution API (level/cat/source distribution, project progress, heatmap)
- Add /reports/stats API (total/auto/manual/reviewed counts + level distribution)
- Fix report download: add template relationship to ClassificationProject
- All stats computed from real DB queries
Frontend:
- Dashboard.vue: replace all hardcoded data with API-driven computed charts
- Report.vue: replace all hardcoded data with API-driven charts
- Add dashboard.ts and report.ts API clients
- Fix Classification.vue: levels use res.data, auto-fetch on mount
- Fix Task.vue: levels and categories use res.data
- Fix Project.vue: templates use res.data
Backend:
- Add GET /classifications/results endpoint with project/level/keyword filters
- Add column relationship to ClassificationResult model
- Fix test data generator to fetch column IDs from DB after bulk insert
Frontend:
- Fix request.ts interceptor to return full response body (keep total/pagination)
- Fix all pages to use res.data instead of res
- Add getClassificationResults API in classification.ts
- Implement fetchData in Classification.vue with proper filtering and pagination
- Fix same res.data issue in Category.vue, Metadata.vue, Project.vue, DataSource.vue, Dashboard.vue, Task.vue