Add complete SQLite implementation of RelayLabelRepository trait with
all CRUD operations (get_label, save_label, delete_label, get_all_labels).
Key changes:
- Create infrastructure entities module with RelayLabelRecord struct
- Implement TryFrom traits for converting between database records and domain types
- Add From<sqlx::Error> and From<RelayLabelError> for RepositoryError
- Write comprehensive functional tests covering all repository operations
- Verify proper handling of edge cases (empty results, overwrites, max length)
TDD phase: GREEN - All repository trait tests now passing with SQLite implementation
Ref: T036 (specs/001-modbus-relay-control/tasks.md)
Add reusable test suite with 18 test functions covering get_label(),
save_label(), delete_label(), and get_all_labels() methods. Tests
verify contract compliance for any repository implementation.
Added delete_label() method to trait interface and implemented it in
MockRelayLabelRepository to support complete CRUD operations.
TDD phase: RED - Tests written before SQLite implementation (T036)
Ref: T035 (specs/001-modbus-relay-control/tasks.md)
Convert project from single backend to monorepo structure with separate
frontend (Vue 3 + TypeScript + Vite) and backend directories. Updates
all configuration files and build system to support both workspaces.
Ref: T007 (specs/001-modbus-relay-control)