Blocked by #564, #565
Description
Add a config/presets system for the graph page so users can save and load named topic selection configurations (e.g. "BMS Profile", "Suspension Profile"). Configs are shared across all clients and persisted server-side via scylla using simple file read/write — no database needed. This addresses repeated requests from engineers who want quick access to their common topic groupings without manually selecting each time.
Context: engineers monitoring the car live want preset topic groups per subsystem (BMS temps + pack current, suspension IMU + potentiometers, etc.) so they don't re-select every session.
Acceptance Criteria
- Users can save the current graph page topic selection as a named config
- Users can load a saved config to restore its topic selection
- Users can delete configs they no longer need
- Configs are served from scylla and available across all clients
- Scylla persists configs to a dedicated directory using file read/write, similar to existing patterns in file_insertion_controller.rs
- A reasonable cap on total config storage size is enforced server-side
- Config payloads are compact — consider protobuf serialization to keep size down
- New REST endpoints: GET (list/fetch configs), POST (create), DELETE (remove)
Proposed Solution
Backend (scylla-server):
Add a new config controller with CRUD endpoints. Store each config as a file in a dedicated directory (reference the OutputDirectory / ensure_directory_exists pattern in main.rs). Each config file contains the preset name and list of topic names. Enforce a max directory size cap and reject writes that would exceed it. Define a proto message for the config payload to keep serialization compact, following the existing proto patterns in src/proto/.
Frontend (angular-client):
Add a config service to call the new endpoints. Add save/load UI to the graph sidebar — a dropdown or menu listing available configs with save and delete actions. Loading a config updates the topic selection via topic-selection.service.ts. Implementation details and UI design left to the developer.
Blocked by #564, #565
Description
Add a config/presets system for the graph page so users can save and load named topic selection configurations (e.g. "BMS Profile", "Suspension Profile"). Configs are shared across all clients and persisted server-side via scylla using simple file read/write — no database needed. This addresses repeated requests from engineers who want quick access to their common topic groupings without manually selecting each time.
Context: engineers monitoring the car live want preset topic groups per subsystem (BMS temps + pack current, suspension IMU + potentiometers, etc.) so they don't re-select every session.
Acceptance Criteria
Proposed Solution
Backend (scylla-server):
Add a new config controller with CRUD endpoints. Store each config as a file in a dedicated directory (reference the OutputDirectory / ensure_directory_exists pattern in main.rs). Each config file contains the preset name and list of topic names. Enforce a max directory size cap and reject writes that would exceed it. Define a proto message for the config payload to keep serialization compact, following the existing proto patterns in src/proto/.
Frontend (angular-client):
Add a config service to call the new endpoints. Add save/load UI to the graph sidebar — a dropdown or menu listing available configs with save and delete actions. Loading a config updates the topic selection via topic-selection.service.ts. Implementation details and UI design left to the developer.