feat: rename farmer to resource provider across codebase and update terminology
This commit is contained in:
@@ -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,
|
||||
|
Reference in New Issue
Block a user