feat: rename farmer to resource provider across codebase and update terminology

This commit is contained in:
mik-tf
2025-09-06 23:27:14 -04:00
parent bf273102cb
commit c8e28cf8ed
34 changed files with 511 additions and 511 deletions

View File

@@ -392,11 +392,11 @@ impl DashboardController {
render_template(&tmpl, "dashboard/user.html", &ctx)
}
/// Renders the farmer section of the dashboard
pub async fn farmer_section(tmpl: web::Data<Tera>, session: Session) -> Result<impl Responder> {
/// Renders the resource provider section of the dashboard
pub async fn resource_provider_section(tmpl: web::Data<Tera>, session: Session) -> Result<impl Responder> {
let mut ctx = crate::models::builders::ContextBuilder::new()
.active_page("dashboard")
.active_section("farmer")
.active_section("resource_provider")
.gitea_enabled(get_app_config().is_gitea_enabled())
.build();
@@ -406,17 +406,17 @@ impl DashboardController {
return render_template(&tmpl, "dashboard/welcome.html", &ctx);
}
// FARMER FIX: Use persistent data only, no mock data for farmer dashboard
// RESOURCE PROVIDER FIX: Use persistent data only, no mock data for resource provider dashboard
if let Ok(Some(user_email)) = session.get::<String>("user_email") {
ctx.insert("user_email", &user_email);
// Initialize farmer service with slice calculator
if let Ok(farmer_service) = crate::services::farmer::FarmerService::builder().build() {
// Repair node-group data consistency when farmer dashboard loads
if let Err(_e) = farmer_service.repair_node_group_consistency(&user_email) {
// Initialize resource provider service with slice calculator
if let Ok(resource_provider_service) = crate::services::resource_provider::ResourceProviderService::builder().build() {
// Repair node-group data consistency when resource provider dashboard loads
if let Err(_e) = resource_provider_service.repair_node_group_consistency(&user_email) {
}
// Repair missing marketplace SLA data for existing nodes
if let Err(_e) = farmer_service.repair_missing_marketplace_sla(
if let Err(_e) = resource_provider_service.repair_missing_marketplace_sla(
&user_email,
99.8, // default uptime
100, // default bandwidth
@@ -424,18 +424,18 @@ impl DashboardController {
) {
}
// Get farmer nodes with updated slice calculations
let farmer_nodes = farmer_service.get_farmer_nodes(&user_email);
// Get resource provider nodes with updated slice calculations
let resource_provider_nodes = resource_provider_service.get_resource_provider_nodes(&user_email);
// Calculate farmer statistics from nodes
let total_nodes = farmer_nodes.len() as u32;
// Calculate resource_provider statistics from nodes
let total_nodes = resource_provider_nodes.len() as u32;
let mut online_nodes = 0u32;
let mut total_base_slices = 0u32;
let mut allocated_base_slices = 0u32;
let mut total_monthly_earnings = rust_decimal::Decimal::ZERO;
let mut average_uptime = 0.0f32;
for node in &farmer_nodes {
for node in &resource_provider_nodes {
if matches!(node.status, crate::models::user::NodeStatus::Online) {
online_nodes += 1;
}
@@ -449,8 +449,8 @@ impl DashboardController {
average_uptime /= total_nodes as f32;
}
// Create farmer statistics for the dashboard
let farmer_stats = serde_json::json!({
// Create resource_provider statistics for the dashboard
let resource_provider_stats = serde_json::json!({
"total_nodes": total_nodes,
"online_nodes": online_nodes,
"total_base_slices": total_base_slices,
@@ -465,8 +465,8 @@ impl DashboardController {
}
});
ctx.insert("farmer_stats", &farmer_stats);
ctx.insert("farmer_nodes", &farmer_nodes);
ctx.insert("resource_provider_stats", &resource_provider_stats);
ctx.insert("resource_provider_nodes", &resource_provider_nodes);
}
// Load user data from session (without mock data override)
@@ -490,7 +490,7 @@ impl DashboardController {
}
ctx.insert("wallet_balance", &persistent_data.wallet_balance_usd);
ctx.insert("farmer_earnings", &persistent_data.farmer_earnings);
ctx.insert("resource_provider_earnings", &persistent_data.resource_provider_earnings);
}
ctx.insert("user_json", &user_json);
@@ -498,10 +498,10 @@ impl DashboardController {
}
}
// Load slice rental service to get farmer slice rental statistics
// Load slice rental service to get resource_provider slice rental statistics
if let Ok(slice_rental_service) = crate::services::slice_rental::SliceRentalService::builder().build() {
let farmer_slice_stats = slice_rental_service.get_farmer_slice_statistics(&user_email);
ctx.insert("slice_rental_statistics", &farmer_slice_stats);
let resource_provider_slice_stats = slice_rental_service.get_resource_provider_slice_statistics(&user_email);
ctx.insert("slice_rental_statistics", &resource_provider_slice_stats);
// Release any expired rentals
if let Err(_e) = slice_rental_service.release_expired_rentals(&user_email) {
@@ -509,7 +509,7 @@ impl DashboardController {
}
}
render_template(&tmpl, "dashboard/farmer.html", &ctx)
render_template(&tmpl, "dashboard/resource_provider.html", &ctx)
}
/// Renders the app provider section of the dashboard
@@ -837,13 +837,13 @@ impl DashboardController {
render_template(&tmpl, "dashboard/pools.html", &ctx)
}
/// API endpoint to return farmer dashboard data as JSON
pub async fn farmer_data_api(session: Session) -> Result<impl Responder> {
/// API endpoint to return resource_provider dashboard data as JSON
pub async fn resource_provider_data_api(session: Session) -> Result<impl Responder> {
let user_email = session.get::<String>("user_email").unwrap_or_default().unwrap_or_default();
// FARMER FIX: Use farmer service to ensure data consistency
let farmer_service = match crate::services::farmer::FarmerService::builder().build() {
// RESOURCE_PROVIDER FIX: Use resource_provider service to ensure data consistency
let resource_provider_service = match crate::services::resource_provider::ResourceProviderService::builder().build() {
Ok(service) => service,
Err(_e) => {
return Ok(ResponseBuilder::internal_error().json(serde_json::json!({
@@ -853,16 +853,16 @@ impl DashboardController {
};
// Repair data consistency before loading
if let Err(_e) = farmer_service.repair_node_group_consistency(&user_email) {
if let Err(_e) = resource_provider_service.repair_node_group_consistency(&user_email) {
}
// Load real farmer data from persistence using farmer service
let nodes = farmer_service.get_farmer_nodes(&user_email);
let earnings = farmer_service.get_farmer_earnings(&user_email);
let stats = farmer_service.get_farmer_statistics(&user_email);
// Load real resource_provider data from persistence using resource_provider service
let nodes = resource_provider_service.get_resource_provider_nodes(&user_email);
let earnings = resource_provider_service.get_resource_provider_earnings(&user_email);
let stats = resource_provider_service.get_resource_provider_statistics(&user_email);
// Always use persistent data - no fallback to mock data for farmer dashboard
// If no data exists, return empty but valid farmer data structure
// Always use persistent data - no fallback to mock data for resource_provider dashboard
// If no data exists, return empty but valid resource_provider data structure
if nodes.is_empty() {
return Ok(ResponseBuilder::ok()
.json(serde_json::json!({
@@ -885,12 +885,12 @@ impl DashboardController {
.build());
}
// Load slice products for this farmer
// Load slice products for this resource_provider
let slice_products = crate::services::user_persistence::UserPersistence::get_slice_products(&user_email);
let active_slices = slice_products.len() as i32;
// Build comprehensive farmer data using statistics from farmer service
let farmer_data = serde_json::json!({
// Build comprehensive resource_provider data using statistics from resource_provider service
let resource_provider_data = serde_json::json!({
"total_nodes": stats.total_nodes,
"online_nodes": stats.online_nodes,
"total_capacity": stats.total_capacity,
@@ -904,13 +904,13 @@ impl DashboardController {
"slice_products": slice_products
});
Ok(ResponseBuilder::ok()
.json(farmer_data)
.json(resource_provider_data)
.build())
}
/// Enhanced farmer dashboard with node management
pub async fn farmer_dashboard_enhanced(tmpl: web::Data<Tera>, session: Session) -> Result<impl Responder> {
let farmer_service = crate::services::farmer::FarmerService::builder()
/// Enhanced resource_provider dashboard with node management
pub async fn resource_provider_dashboard_enhanced(tmpl: web::Data<Tera>, session: Session) -> Result<impl Responder> {
let resource_provider_service = crate::services::resource_provider::ResourceProviderService::builder()
.auto_sync_enabled(true)
.metrics_collection(true)
.build()
@@ -922,14 +922,14 @@ impl DashboardController {
.unwrap_or_default()
.unwrap_or_default();
// Load farmer data using the service
let nodes = farmer_service.get_farmer_nodes(&user_email);
let earnings = farmer_service.get_farmer_earnings(&user_email);
let stats = farmer_service.get_farmer_statistics(&user_email);
// Load resource_provider data using the service
let nodes = resource_provider_service.get_resource_provider_nodes(&user_email);
let earnings = resource_provider_service.get_resource_provider_earnings(&user_email);
let stats = resource_provider_service.get_resource_provider_statistics(&user_email);
let mut ctx = crate::models::builders::ContextBuilder::new()
.active_page("dashboard")
.active_section("farmer")
.active_section("resource_provider")
.build();
ctx.insert("nodes", &nodes);
@@ -944,10 +944,10 @@ impl DashboardController {
ctx.insert("user", &user);
}
render_template(&tmpl, "dashboard/farmer.html", &ctx)
render_template(&tmpl, "dashboard/resource_provider.html", &ctx)
}
/// API endpoint to add a new farm node using FarmerService
/// API endpoint to add a new farm node using ResourceProviderService
pub async fn add_farm_node_enhanced(session: Session, form: web::Json<serde_json::Value>) -> Result<impl Responder> {
let user_email = session.get::<String>("user_email")
@@ -960,8 +960,8 @@ impl DashboardController {
})).build());
}
// Initialize farmer service
let farmer_service = match crate::services::farmer::FarmerService::builder().build() {
// Initialize resource_provider service
let resource_provider_service = match crate::services::resource_provider::ResourceProviderService::builder().build() {
Ok(service) => service,
Err(_e) => {
return Ok(ResponseBuilder::internal_error().json(serde_json::json!({
@@ -1064,7 +1064,7 @@ impl DashboardController {
.bandwidth_mbps(node_data_json.get("bandwidth_mbps")
.and_then(|v| v.as_i64())
.unwrap_or(100) as i32)
.node_type("MyceliumNode"); // Always MyceliumNode - farmers register MyceliumNodes to Mycelium Grid
.node_type("MyceliumNode"); // Always MyceliumNode - resource providers register MyceliumNodes to Mycelium Grid
// Add optional fields
if let Some(region) = node_data_json.get("region").and_then(|v| v.as_str()) {
@@ -1087,8 +1087,8 @@ impl DashboardController {
actix_web::error::ErrorBadRequest(format!("Invalid node data: {}", e))
})?;
// Add node using farmer service
match farmer_service.add_node(&user_email, node_data) {
// Add node using resource_provider service
match resource_provider_service.add_node(&user_email, node_data) {
Ok(node) => {
// Add activity record
@@ -1143,7 +1143,7 @@ impl DashboardController {
_ => crate::models::user::NodeStatus::Offline,
};
let farmer_service = match crate::services::farmer::FarmerService::builder().build() {
let resource_provider_service = match crate::services::resource_provider::ResourceProviderService::builder().build() {
Ok(service) => service,
Err(e) => {
return Ok(ResponseBuilder::internal_error().json(serde_json::json!({
@@ -1152,7 +1152,7 @@ impl DashboardController {
}
};
match farmer_service.update_node_status(&user_email, &node_id, status) {
match resource_provider_service.update_node_status(&user_email, &node_id, status) {
Ok(()) => {
Ok(ResponseBuilder::ok().json(serde_json::json!({
"success": true,
@@ -1182,7 +1182,7 @@ impl DashboardController {
let node_id = path.into_inner();
let farmer_service = match crate::services::farmer::FarmerService::builder().build() {
let resource_provider_service = match crate::services::resource_provider::ResourceProviderService::builder().build() {
Ok(service) => service,
Err(e) => {
return Ok(ResponseBuilder::internal_error().json(serde_json::json!({
@@ -1191,7 +1191,7 @@ impl DashboardController {
}
};
match farmer_service.get_node_by_id(&user_email, &node_id) {
match resource_provider_service.get_node_by_id(&user_email, &node_id) {
Some(mut node) => {
// MARKETPLACE SLA FIX: Override grid data with marketplace SLA values when available
@@ -1235,7 +1235,7 @@ impl DashboardController {
})).build());
}
let farmer_service = match crate::services::farmer::FarmerService::builder().build() {
let resource_provider_service = match crate::services::resource_provider::ResourceProviderService::builder().build() {
Ok(service) => service,
Err(e) => {
return Ok(ResponseBuilder::internal_error().json(serde_json::json!({
@@ -1244,7 +1244,7 @@ impl DashboardController {
}
};
let stats = farmer_service.get_farmer_statistics(&user_email);
let stats = resource_provider_service.get_resource_provider_statistics(&user_email);
Ok(ResponseBuilder::ok().json(serde_json::json!({
"success": true,
@@ -1262,7 +1262,7 @@ impl DashboardController {
}
/// API endpoint to update node configuration
pub async fn update_node_comprehensive(session: Session, path: web::Path<String>, form: web::Json<crate::services::farmer::NodeUpdateData>) -> Result<impl Responder> {
pub async fn update_node_comprehensive(session: Session, path: web::Path<String>, form: web::Json<crate::services::resource_provider::NodeUpdateData>) -> Result<impl Responder> {
let user_email = session.get::<String>("user_email")
.unwrap_or_default()
.unwrap_or_default();
@@ -1275,7 +1275,7 @@ impl DashboardController {
let node_id = path.into_inner();
let farmer_service = match crate::services::farmer::FarmerService::builder().build() {
let resource_provider_service = match crate::services::resource_provider::ResourceProviderService::builder().build() {
Ok(service) => service,
Err(e) => {
return Ok(ResponseBuilder::internal_error().json(serde_json::json!({
@@ -1284,7 +1284,7 @@ impl DashboardController {
}
};
match farmer_service.update_node(&user_email, &node_id, form.into_inner()) {
match resource_provider_service.update_node(&user_email, &node_id, form.into_inner()) {
Ok(()) => {
// Add activity record
@@ -1324,7 +1324,7 @@ impl DashboardController {
})).build());
}
let farmer_service = match crate::services::farmer::FarmerService::builder().build() {
let resource_provider_service = match crate::services::resource_provider::ResourceProviderService::builder().build() {
Ok(service) => service,
Err(e) => {
return Ok(ResponseBuilder::internal_error().json(serde_json::json!({
@@ -1338,7 +1338,7 @@ impl DashboardController {
let mut customized_formats = Vec::new();
for format_id in default_format_ids {
if let Some(format) = farmer_service.get_default_slice_format_with_customizations(&user_email, format_id) {
if let Some(format) = resource_provider_service.get_default_slice_format_with_customizations(&user_email, format_id) {
customized_formats.push(format);
}
}
@@ -1358,7 +1358,7 @@ impl DashboardController {
})).build());
}
let farmer_service = match crate::services::farmer::FarmerService::builder().build() {
let resource_provider_service = match crate::services::resource_provider::ResourceProviderService::builder().build() {
Ok(service) => service,
Err(e) => {
return Ok(ResponseBuilder::internal_error().json(serde_json::json!({
@@ -1367,7 +1367,7 @@ impl DashboardController {
}
};
let groups = farmer_service.get_node_groups(&user_email);
let groups = resource_provider_service.get_node_groups(&user_email);
Ok(ResponseBuilder::ok().json(groups).build())
}
@@ -1383,7 +1383,7 @@ impl DashboardController {
})).build());
}
let farmer_service = match crate::services::farmer::FarmerService::builder().build() {
let resource_provider_service = match crate::services::resource_provider::ResourceProviderService::builder().build() {
Ok(service) => service,
Err(e) => {
return Ok(ResponseBuilder::internal_error().json(serde_json::json!({
@@ -1402,7 +1402,7 @@ impl DashboardController {
.and_then(|v| v.as_str())
.map(|s| s.to_string());
match farmer_service.create_custom_node_group(&user_email, name, description, None) {
match resource_provider_service.create_custom_node_group(&user_email, name, description, None) {
Ok(group) => {
Ok(ResponseBuilder::ok().json(serde_json::json!({
"success": true,
@@ -1431,7 +1431,7 @@ impl DashboardController {
})).build());
}
let farmer_service = match crate::services::farmer::FarmerService::builder().build() {
let resource_provider_service = match crate::services::resource_provider::ResourceProviderService::builder().build() {
Ok(service) => service,
Err(e) => {
return Ok(ResponseBuilder::internal_error().json(serde_json::json!({
@@ -1449,10 +1449,10 @@ impl DashboardController {
.and_then(|v| v.as_str())
.map(|s| s.to_string());
match farmer_service.update_node_group_assignment(&user_email, node_id, group_id) {
match resource_provider_service.update_node_group_assignment(&user_email, node_id, group_id) {
Ok(group_name) => {
// FARMER FIX: Repair consistency after group assignment change
if let Err(e) = farmer_service.repair_node_group_consistency(&user_email) {
// RESOURCE_PROVIDER FIX: Repair consistency after group assignment change
if let Err(e) = resource_provider_service.repair_node_group_consistency(&user_email) {
}
Ok(ResponseBuilder::ok().json(serde_json::json!({
"success": true,
@@ -1482,7 +1482,7 @@ impl DashboardController {
})).build());
}
let farmer_service = match crate::services::farmer::FarmerService::builder().build() {
let resource_provider_service = match crate::services::resource_provider::ResourceProviderService::builder().build() {
Ok(service) => service,
Err(e) => {
return Ok(ResponseBuilder::internal_error().json(serde_json::json!({
@@ -1493,7 +1493,7 @@ impl DashboardController {
let group_id = path.into_inner();
match farmer_service.delete_custom_node_group(&user_email, &group_id) {
match resource_provider_service.delete_custom_node_group(&user_email, &group_id) {
Ok(()) => {
Ok(ResponseBuilder::ok().json(serde_json::json!({
"success": true,
@@ -1523,7 +1523,7 @@ impl DashboardController {
let format_id = path.into_inner();
let farmer_service = match crate::services::farmer::FarmerService::builder().build() {
let resource_provider_service = match crate::services::resource_provider::ResourceProviderService::builder().build() {
Ok(service) => service,
Err(e) => {
return Ok(ResponseBuilder::internal_error().json(serde_json::json!({
@@ -1532,7 +1532,7 @@ impl DashboardController {
}
};
match farmer_service.get_default_slice_format_with_customizations(&user_email, &format_id) {
match resource_provider_service.get_default_slice_format_with_customizations(&user_email, &format_id) {
Some(format) => {
Ok(ResponseBuilder::ok().json(format).build())
}
@@ -1558,7 +1558,7 @@ impl DashboardController {
let format_id = path.into_inner();
let farmer_service = match crate::services::farmer::FarmerService::builder().build() {
let resource_provider_service = match crate::services::resource_provider::ResourceProviderService::builder().build() {
Ok(service) => service,
Err(e) => {
return Ok(ResponseBuilder::internal_error().json(serde_json::json!({
@@ -1576,7 +1576,7 @@ impl DashboardController {
let bandwidth_mbps = form.get("bandwidth_mbps").and_then(|v| v.as_i64()).unwrap_or(100) as i32;
let price_per_hour = form.get("price_per_hour").and_then(|v| v.as_f64()).map(rust_decimal::Decimal::from_f64_retain).flatten().unwrap_or(rust_decimal::Decimal::from(10));
let customization = crate::services::farmer::DefaultSliceFormat {
let customization = crate::services::resource_provider::DefaultSliceFormat {
id: format_id.clone(),
name,
cpu_cores,
@@ -1587,7 +1587,7 @@ impl DashboardController {
price_per_hour,
};
match farmer_service.save_default_slice_customization(&user_email, &format_id, customization) {
match resource_provider_service.save_default_slice_customization(&user_email, &format_id, customization) {
Ok(_) => {
Ok(ResponseBuilder::ok().json(serde_json::json!({
"success": true,
@@ -1630,9 +1630,9 @@ impl DashboardController {
.map(|p| rust_decimal::Decimal::from_f64_retain(p).unwrap_or(rust_decimal::Decimal::new(50, 2)))
.unwrap_or(rust_decimal::Decimal::new(50, 2)); // Fallback to 0.50 TFC/hour only if no price provided
// Load user data to get farmer name
// Load user data to get resource_provider name
let user = Self::load_user_with_persistent_data(&session);
let farmer_name = user.as_ref().map(|u| u.name.clone()).unwrap_or_else(|| "Unknown Farmer".to_string());
let resource_provider_name = user.as_ref().map(|u| u.name.clone()).unwrap_or_else(|| "Unknown ResourceProvider".to_string());
// Create slice configuration with pricing
let slice_pricing = crate::models::product::SlicePricing::from_hourly(
@@ -1657,7 +1657,7 @@ impl DashboardController {
// Create slice product
let slice_product = crate::models::product::Product::create_slice_product(
user_email.clone(),
farmer_name,
resource_provider_name,
name,
slice_config,
price_per_hour,
@@ -2225,18 +2225,18 @@ impl DashboardController {
}
};
// Initialize farmer service to check for existing nodes
let farmer_service = match crate::services::farmer::FarmerService::builder().build() {
// Initialize resource_provider service to check for existing nodes
let resource_provider_service = match crate::services::resource_provider::ResourceProviderService::builder().build() {
Ok(service) => service,
Err(e) => {
return Ok(ResponseBuilder::internal_error().json(serde_json::json!({
"error": "Failed to initialize farmer service"
"error": "Failed to initialize resource_provider service"
})).build());
}
};
// Get existing nodes to check for duplicates
let existing_nodes = farmer_service.get_farmer_nodes(&user_email);
let existing_nodes = resource_provider_service.get_resource_provider_nodes(&user_email);
// Validate each node and fetch data
let mut validated_nodes = Vec::new();
@@ -2502,12 +2502,12 @@ impl DashboardController {
let slice_format = form.get("slice_format").and_then(|v| v.as_str()).map(|s| s.to_string());
let slice_price = form.get("slice_price").and_then(|v| v.as_f64()).map(|p| Decimal::from_f64_retain(p).unwrap_or_default());
// Initialize farmer service
let farmer_service = match crate::services::farmer::FarmerService::builder().build() {
// Initialize resource_provider service
let resource_provider_service = match crate::services::resource_provider::ResourceProviderService::builder().build() {
Ok(service) => service,
Err(e) => {
return Ok(ResponseBuilder::internal_error().json(serde_json::json!({
"error": "Failed to initialize farmer service"
"error": "Failed to initialize resource_provider service"
})).build());
}
};
@@ -2515,7 +2515,7 @@ impl DashboardController {
// Add nodes with comprehensive configuration
log::info!(
target: "api.dashboard",
"add_grid_nodes:invoke_farmer_service req_id={} email={} node_count={} slice_enabled={} full_node_enabled={} pricing_mode={}",
"add_grid_nodes:invoke_resource_provider_service req_id={} email={} node_count={} slice_enabled={} full_node_enabled={} pricing_mode={}",
req_id,
user_email,
node_ids.len(),
@@ -2556,19 +2556,19 @@ impl DashboardController {
// For multi-node scenarios, apply pricing configuration based on user choice
if node_ids.len() > 1 && pricing_mode == "same_for_all" && rental_options.is_some() {
} else if node_ids.len() > 1 && pricing_mode == "individual" && individual_node_pricing.is_some() {
// Individual pricing will be handled in the farmer service
// Individual pricing will be handled in the resource_provider service
}
// Choose the appropriate method based on pricing mode
if pricing_mode == "individual" && individual_node_pricing.is_some() {
farmer_service.add_multiple_grid_nodes_with_individual_pricing(
resource_provider_service.add_multiple_grid_nodes_with_individual_pricing(
&user_email,
node_ids.clone(),
slice_formats,
individual_node_pricing.unwrap()
).await
} else {
farmer_service.add_multiple_grid_nodes_with_comprehensive_config(
resource_provider_service.add_multiple_grid_nodes_with_comprehensive_config(
&user_email,
node_ids.clone(),
slice_formats,
@@ -2576,7 +2576,7 @@ impl DashboardController {
).await
}
} else {
farmer_service.add_multiple_grid_nodes(&user_email, node_ids.clone()).await
resource_provider_service.add_multiple_grid_nodes(&user_email, node_ids.clone()).await
};
match add_result {
@@ -2594,7 +2594,7 @@ impl DashboardController {
// If node_group_id is provided, assign nodes to existing group
if let Some(group_id) = node_group_id {
for node in &added_nodes {
if let Err(e) = farmer_service.assign_node_to_group(&user_email, &node.id, Some(group_id.clone())) {
if let Err(e) = resource_provider_service.assign_node_to_group(&user_email, &node.id, Some(group_id.clone())) {
} else {
}
}
@@ -2606,7 +2606,7 @@ impl DashboardController {
group_data.get("description").and_then(|v| v.as_str())
) {
// Create node group
match farmer_service.create_custom_node_group(
match resource_provider_service.create_custom_node_group(
&user_email,
group_name.to_string(),
Some(group_description.to_string()),
@@ -2626,7 +2626,7 @@ impl DashboardController {
// Add nodes to group
for node in &added_nodes {
if let Err(e) = farmer_service.assign_node_to_group(&user_email, &node.id, Some(group.id.clone())) {
if let Err(e) = resource_provider_service.assign_node_to_group(&user_email, &node.id, Some(group.id.clone())) {
}
}
}
@@ -2663,7 +2663,7 @@ impl DashboardController {
}
};
if let Err(e) = farmer_service.stake_on_node(&user_email, &node.id, staking_options) {
if let Err(e) = resource_provider_service.stake_on_node(&user_email, &node.id, staking_options) {
} else {
}
}
@@ -2691,7 +2691,7 @@ impl DashboardController {
};
for node in &added_nodes {
if let Err(e) = farmer_service.stake_on_node(&user_email, &node.id, staking_options.clone()) {
if let Err(e) = resource_provider_service.stake_on_node(&user_email, &node.id, staking_options.clone()) {
} else {
}
}
@@ -2752,11 +2752,11 @@ impl DashboardController {
let slice_format = form.get("slice_format").and_then(|v| v.as_str()).map(|s| s.to_string());
let slice_price = form.get("slice_price").and_then(|v| v.as_f64()).map(|p| Decimal::from_f64_retain(p).unwrap_or_default());
let farmer_service = match crate::services::farmer::FarmerService::builder().build() {
let resource_provider_service = match crate::services::resource_provider::ResourceProviderService::builder().build() {
Ok(service) => service,
Err(_e) => {
return Ok(ResponseBuilder::internal_error().json(serde_json::json!({
"error": "Failed to initialize farmer service"
"error": "Failed to initialize resource_provider service"
})).build());
}
};
@@ -2774,7 +2774,7 @@ impl DashboardController {
resource_optimization: crate::models::user::ResourceOptimization::default(),
};
match farmer_service.create_custom_node_group(
match resource_provider_service.create_custom_node_group(
&user_email,
name.to_string(),
description,
@@ -2810,7 +2810,7 @@ impl DashboardController {
})).build()),
};
let farmer_service = match crate::services::farmer::FarmerService::builder().build() {
let resource_provider_service = match crate::services::resource_provider::ResourceProviderService::builder().build() {
Ok(service) => service,
Err(e) => return Ok(ResponseBuilder::internal_error().json(serde_json::json!({
"success": false,
@@ -2818,15 +2818,15 @@ impl DashboardController {
})).build()),
};
// FARMER FIX: Repair node-group data consistency before getting statistics
if let Err(e) = farmer_service.repair_node_group_consistency(&user_email) {
// RESOURCE_PROVIDER FIX: Repair node-group data consistency before getting statistics
if let Err(e) = resource_provider_service.repair_node_group_consistency(&user_email) {
}
let groups = farmer_service.get_node_groups(&user_email);
let groups = resource_provider_service.get_node_groups(&user_email);
let mut groups_with_stats = Vec::new();
for group in groups {
match farmer_service.get_group_statistics(&user_email, &group.id) {
match resource_provider_service.get_group_statistics(&user_email, &group.id) {
Ok(stats) => {
groups_with_stats.push(serde_json::json!({
"group": group,
@@ -5387,7 +5387,7 @@ impl DashboardController {
};
// Check if node exists and get its details first
let farmer_service = match crate::services::farmer::FarmerService::builder().build() {
let resource_provider_service = match crate::services::resource_provider::ResourceProviderService::builder().build() {
Ok(service) => service,
Err(e) => {
return Ok(ResponseBuilder::internal_error().json(serde_json::json!({
@@ -5398,7 +5398,7 @@ impl DashboardController {
};
// Verify node exists and belongs to user
let _node = match farmer_service.get_node_by_id(&user_email, &node_id) {
let _node = match resource_provider_service.get_node_by_id(&user_email, &node_id) {
Some(node) => node,
None => {
return Ok(ResponseBuilder::not_found().json(serde_json::json!({
@@ -5457,7 +5457,7 @@ impl DashboardController {
}
};
let _farmer_service = match crate::services::farmer::FarmerService::builder().build() {
let _resource_provider_service = match crate::services::resource_provider::ResourceProviderService::builder().build() {
Ok(service) => service,
Err(e) => {
return Ok(ResponseBuilder::internal_error().json(serde_json::json!({
@@ -5927,7 +5927,7 @@ impl DashboardController {
}
};
let farmer_service = match crate::services::farmer::FarmerService::builder().build() {
let resource_provider_service = match crate::services::resource_provider::ResourceProviderService::builder().build() {
Ok(service) => service,
Err(e) => {
return Ok(ResponseBuilder::internal_error().json(serde_json::json!({
@@ -5970,7 +5970,7 @@ impl DashboardController {
};
// Stake on node
match farmer_service.stake_on_node(&user_email, &node_id, staking_options) {
match resource_provider_service.stake_on_node(&user_email, &node_id, staking_options) {
Ok(()) => {
Ok(ResponseBuilder::ok().json(serde_json::json!({
"success": true,
@@ -6010,7 +6010,7 @@ impl DashboardController {
}
};
let farmer_service = match crate::services::farmer::FarmerService::builder().build() {
let resource_provider_service = match crate::services::resource_provider::ResourceProviderService::builder().build() {
Ok(service) => service,
Err(e) => {
return Ok(ResponseBuilder::internal_error().json(serde_json::json!({
@@ -6030,7 +6030,7 @@ impl DashboardController {
match action {
"unstake" => {
// Unstake from node
match farmer_service.unstake_from_node(&user_email, &node_id) {
match resource_provider_service.unstake_from_node(&user_email, &node_id) {
Ok(returned_amount) => {
Ok(ResponseBuilder::ok().json(serde_json::json!({
"success": true,
@@ -6078,7 +6078,7 @@ impl DashboardController {
};
// Update node staking
match farmer_service.update_node_staking(&user_email, &node_id, staking_options) {
match resource_provider_service.update_node_staking(&user_email, &node_id, staking_options) {
Ok(()) => {
Ok(ResponseBuilder::ok().json(serde_json::json!({
"success": true,
@@ -6120,7 +6120,7 @@ impl DashboardController {
}
};
let farmer_service = match crate::services::farmer::FarmerService::builder().build() {
let resource_provider_service = match crate::services::resource_provider::ResourceProviderService::builder().build() {
Ok(service) => service,
Err(e) => {
return Ok(ResponseBuilder::internal_error().json(serde_json::json!({
@@ -6130,7 +6130,7 @@ impl DashboardController {
}
};
let statistics = farmer_service.get_staking_statistics(&user_email);
let statistics = resource_provider_service.get_staking_statistics(&user_email);
Ok(ResponseBuilder::ok().json(serde_json::json!({
"success": false,
@@ -6293,7 +6293,7 @@ impl DashboardController {
.build())
}
/// Refresh slice calculations for farmer
/// Refresh slice calculations for resource_provider
pub async fn refresh_slice_calculations(session: Session) -> Result<impl Responder> {
let user_email = match session.get::<String>("user_email") {
Ok(Some(email)) => email,
@@ -6303,7 +6303,7 @@ impl DashboardController {
})).build())
};
let farmer_service = match crate::services::farmer::FarmerService::builder().build() {
let resource_provider_service = match crate::services::resource_provider::ResourceProviderService::builder().build() {
Ok(service) => service,
Err(e) => {
return Ok(ResponseBuilder::internal_error().json(serde_json::json!({
@@ -6313,7 +6313,7 @@ impl DashboardController {
}
};
match farmer_service.refresh_all_slice_calculations(&user_email) {
match resource_provider_service.refresh_all_slice_calculations(&user_email) {
Ok(_) => {
Ok(ResponseBuilder::ok().json(serde_json::json!({
"success": false,
@@ -6329,7 +6329,7 @@ impl DashboardController {
}
}
/// Sync farmer nodes with ThreeFold Grid
/// Sync resource_provider nodes with ThreeFold Grid
pub async fn sync_with_grid(session: Session) -> Result<impl Responder> {
// Check authentication
if let Err(response) = Self::check_authentication(&session) {
@@ -6463,7 +6463,7 @@ impl DashboardController {
let node_id = path.into_inner();
let farmer_service = match crate::services::farmer::FarmerService::builder().build() {
let resource_provider_service = match crate::services::resource_provider::ResourceProviderService::builder().build() {
Ok(service) => service,
Err(e) => {
return Ok(ResponseBuilder::internal_error().json(serde_json::json!({
@@ -6473,7 +6473,7 @@ impl DashboardController {
}
};
match farmer_service.get_node_slices(&user_email, node_id) {
match resource_provider_service.get_node_slices(&user_email, node_id) {
Ok(slices) => {
Ok(ResponseBuilder::ok().json(serde_json::json!({
"success": false,
@@ -6525,7 +6525,7 @@ impl DashboardController {
}
// Initialize services
let farmer_service = match crate::services::farmer::FarmerService::builder().build() {
let resource_provider_service = match crate::services::resource_provider::ResourceProviderService::builder().build() {
Ok(service) => service,
Err(e) => {
return Ok(ResponseBuilder::internal_error().json(serde_json::json!({
@@ -6550,7 +6550,7 @@ impl DashboardController {
let mut errors = Vec::new();
for node_id in &node_ids {
match farmer_service.fetch_and_validate_grid_node(*node_id).await {
match resource_provider_service.fetch_and_validate_grid_node(*node_id).await {
Ok(node_data) => {
// Calculate automatic slices
let total_base_slices = slice_calculator.calculate_max_base_slices(&node_data.capacity);
@@ -6709,8 +6709,8 @@ impl DashboardController {
})).build());
}
// Initialize farmer service
let farmer_service = match crate::services::farmer::FarmerService::builder().build() {
// Initialize resource_provider service
let resource_provider_service = match crate::services::resource_provider::ResourceProviderService::builder().build() {
Ok(service) => service,
Err(e) => {
return Ok(ResponseBuilder::internal_error().json(serde_json::json!({
@@ -6722,7 +6722,7 @@ impl DashboardController {
// Add nodes with automatic slice management
match farmer_service.add_multiple_grid_nodes_with_automatic_slices(
match resource_provider_service.add_multiple_grid_nodes_with_automatic_slices(
&user_email,
node_ids.clone(),
base_slice_price,
@@ -6759,7 +6759,7 @@ impl DashboardController {
}
}
/// API endpoint to refresh slice calculations for all farmer nodes
/// API endpoint to refresh slice calculations for all resource_provider nodes
pub async fn refresh_slice_calculations_api(session: Session) -> Result<impl Responder> {
let user_email = session.get::<String>("user_email")
@@ -6773,8 +6773,8 @@ impl DashboardController {
})).build());
}
// Initialize farmer service
let farmer_service = match crate::services::farmer::FarmerService::builder().build() {
// Initialize resource_provider service
let resource_provider_service = match crate::services::resource_provider::ResourceProviderService::builder().build() {
Ok(service) => service,
Err(e) => {
return Ok(ResponseBuilder::internal_error().json(serde_json::json!({
@@ -6785,7 +6785,7 @@ impl DashboardController {
};
// Refresh slice calculations for all nodes
match farmer_service.refresh_all_slice_calculations_async(&user_email).await {
match resource_provider_service.refresh_all_slice_calculations_async(&user_email).await {
Ok(updated_nodes) => {
Ok(ResponseBuilder::ok().json(serde_json::json!({
@@ -6817,8 +6817,8 @@ impl DashboardController {
})).build());
}
// Initialize farmer service
let farmer_service = match crate::services::farmer::FarmerService::builder().build() {
// Initialize resource_provider service
let resource_provider_service = match crate::services::resource_provider::ResourceProviderService::builder().build() {
Ok(service) => service,
Err(e) => {
return Ok(ResponseBuilder::internal_error().json(serde_json::json!({
@@ -6829,7 +6829,7 @@ impl DashboardController {
};
// Sync all nodes with grid
match farmer_service.sync_all_nodes_with_grid_async(&user_email).await {
match resource_provider_service.sync_all_nodes_with_grid_async(&user_email).await {
Ok(synced_nodes) => {
Ok(ResponseBuilder::ok().json(serde_json::json!({
@@ -6863,8 +6863,8 @@ impl DashboardController {
let node_id = path.into_inner();
// Initialize farmer service
let farmer_service = match crate::services::farmer::FarmerService::builder().build() {
// Initialize resource_provider service
let resource_provider_service = match crate::services::resource_provider::ResourceProviderService::builder().build() {
Ok(service) => service,
Err(e) => {
return Ok(ResponseBuilder::internal_error().json(serde_json::json!({
@@ -6875,7 +6875,7 @@ impl DashboardController {
};
// Get node slice details
match farmer_service.get_node_slice_details(&user_email, &node_id) {
match resource_provider_service.get_node_slice_details(&user_email, &node_id) {
Ok(slice_details) => {
Ok(ResponseBuilder::ok().json(serde_json::json!({
"success": false,