Rewire Resource Provider handlers to use ServiceProvider traits #10

Closed
opened 2026-02-09 21:03:39 +00:00 by mik-tf · 2 comments
Owner

Problem

16 Resource Provider handlers in dashboard bypass the ServiceProvider DI container and directly instantiate fixture-based services. When running with APP_BACKEND=hero, these handlers return empty data because they read from JSON fixture files instead of hero_osis.

Affected Handlers

All handlers in the Resource Provider domain that use patterns like:

let service = ResourceProviderService::builder().build();
let service = UserService::builder().build();

Template-Rendering Handlers (return HTML pages)

  • resource_provider_section — Main RP dashboard page
  • resource_provider_node_detail — Individual node view
  • resource_provider_slice_management — Slice/rental management
  • resource_provider_earnings — Earnings overview
  • resource_provider_wallet — RP wallet view
  • resource_provider_statistics — Statistics page
  • resource_provider_settings — RP settings

API Handlers (return JSON)

  • resource_provider_data_api Already fixed (uses ServiceProvider)
  • resource_provider_nodes_api — Returns node list
  • resource_provider_earnings_api — Returns earnings data
  • resource_provider_statistics_api — Returns statistics
  • resource_provider_node_action_api — Node enable/disable actions
  • Various other RP API endpoints

Solution

For each handler:

  1. Add services: web::Data<ServiceProvider> parameter
  2. Replace ResourceProviderService::builder().build() with services.resource_provider.* calls
  3. Replace UserService::builder().build() with services.users.* calls
  4. Ensure all data passed to Tera templates comes from trait methods

Acceptance Criteria

  • Zero ResourceProviderService::builder() calls remain in RP handlers
  • All RP pages show real data from hero_osis on dev VM
  • Node list, earnings, statistics all populated
  • Slice management shows active rentals
  • Code compiles and tests pass

Dependencies

  • Depends on: #9 (split dashboard.rs)
  • Can be done in parallel with: #11, #12, #13
## Problem 16 Resource Provider handlers in dashboard bypass the ServiceProvider DI container and directly instantiate fixture-based services. When running with `APP_BACKEND=hero`, these handlers return empty data because they read from JSON fixture files instead of hero_osis. ## Affected Handlers All handlers in the Resource Provider domain that use patterns like: ```rust let service = ResourceProviderService::builder().build(); let service = UserService::builder().build(); ``` ### Template-Rendering Handlers (return HTML pages) - `resource_provider_section` — Main RP dashboard page - `resource_provider_node_detail` — Individual node view - `resource_provider_slice_management` — Slice/rental management - `resource_provider_earnings` — Earnings overview - `resource_provider_wallet` — RP wallet view - `resource_provider_statistics` — Statistics page - `resource_provider_settings` — RP settings ### API Handlers (return JSON) - `resource_provider_data_api` — ✅ Already fixed (uses ServiceProvider) - `resource_provider_nodes_api` — Returns node list - `resource_provider_earnings_api` — Returns earnings data - `resource_provider_statistics_api` — Returns statistics - `resource_provider_node_action_api` — Node enable/disable actions - Various other RP API endpoints ## Solution For each handler: 1. Add `services: web::Data<ServiceProvider>` parameter 2. Replace `ResourceProviderService::builder().build()` with `services.resource_provider.*` calls 3. Replace `UserService::builder().build()` with `services.users.*` calls 4. Ensure all data passed to Tera templates comes from trait methods ## Acceptance Criteria - [ ] Zero `ResourceProviderService::builder()` calls remain in RP handlers - [ ] All RP pages show real data from hero_osis on dev VM - [ ] Node list, earnings, statistics all populated - [ ] Slice management shows active rentals - [ ] Code compiles and tests pass ## Dependencies - Depends on: #9 (split dashboard.rs) - Can be done in parallel with: #11, #12, #13
Author
Owner

Rewired 25 Resource Provider handler calls to ServiceProvider traits (commit 277b958). 11 fixture-only calls remain (no trait equivalents).

Rewired 25 Resource Provider handler calls to ServiceProvider traits (commit 277b958). 11 fixture-only calls remain (no trait equivalents).
Author
Owner

Reopened — remaining work

Previous commit rewired 25 handlers but 11 ResourceProviderService::builder() + 11 UserPersistence calls remain.

Remaining bypasses:

  • ResourceProviderService::builder() at lines 667, 702, 1082, 1092, 1369, 2446, 2507, 2569, 2754, 2818, 2862, 2908 — methods: grid sync, slice calculations, format customizations
  • UserPersistence at lines 751, 807, 825, 849, 886, 957, 1020, 1168, 1738, 1910, 2195 — methods: slice products, node CRUD, user lock
  • SessionManager at lines 84, 85 — session infrastructure (keep)

Depends on #26 for new trait methods (get_slice_products, remove_node, etc.)

## Reopened — remaining work Previous commit rewired 25 handlers but 11 `ResourceProviderService::builder()` + 11 `UserPersistence` calls remain. ### Remaining bypasses: - `ResourceProviderService::builder()` at lines 667, 702, 1082, 1092, 1369, 2446, 2507, 2569, 2754, 2818, 2862, 2908 — methods: grid sync, slice calculations, format customizations - `UserPersistence` at lines 751, 807, 825, 849, 886, 957, 1020, 1168, 1738, 1910, 2195 — methods: slice products, node CRUD, user lock - `SessionManager` at lines 84, 85 — session infrastructure (keep) Depends on #26 for new trait methods (get_slice_products, remove_node, etc.)
Commenting is not possible because the repository is archived.
No description provided.