Introduce a data service layer for chart widgets #20
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Problem
Chart data is written as literals inline in the views:
The same list appears in
DashboardViewandGridStackView, for both the line and the bar chart. Consequences:Proposal
Add a small service layer between views and charts, e.g.:
ChartSeries/ChartDataSetrecord holding series name, values and category labels.ChartDataServiceinterface (Spring bean) with methods likerevenueByMonth(...),revenueByRegion(...).Keep it deliberately thin — the point is the seam, not a persistence layer.
Why
Prerequisite for live refresh, the global filter bar, and per-widget refresh actions. All three need "ask for data again with different parameters", which is impossible while the data is a literal in a constructor.
Acceptance criteria
views/../mvnw testgreen.Scope
Small to medium. Best done right after the dashboard merge, while there is only one set of chart factories to migrate.
PR: #34
Neues Package
com.example.datamitChartSeries/KpiData(Records),ChartDataServiceund einer In-Memory-Implementierung, die genau die bisherigen Zahlen liefert.DashboardViewbekommt den Service per Constructor-Injection; die KPI-Kacheln werden auskpis()gelegt, die Grid-IDs (kpi-revenue…) kommen aus den Daten und bleiben unverändert, gespeicherte Layouts passen also weiterhin.Design-Entscheidung: Die Records tragen Übersetzungs-Keys (
month.jan,kpi.revenueTotal), keinen fertigen Text. Labels sind locale-abhängig und brauchen zum Auflösen eineUI— genau das hätte die Testbarkeit ohne Vaadin (Akzeptanzkriterium) kaputtgemacht. Die View löst die Keys gegen das Bundle auf.Tests: neuer
InMemoryChartDataServiceTest(reines JUnit, kein Spring-Context, keine UI),DashboardViewTestunverändert grün.Hinweis:
DashboardChartPlaywrightTest.dataUpdate_keepsTheRenderedSvgInPlacewar bereits aufmainrot (mit gestashten Änderungen verifiziert) — seit den KPI-Kacheln ist das ersteapex-chartim DOM eine Sparkline ohnexaxis.categories, dadurch war der Achsen-Patch ein struktureller Update und hat das SVG zu Recht neu gezeichnet. Der Test zielt jetzt auf ein Achsen-Chart; Produktionscode dafür unverändert../mvnw testist grün.