compiled steel engine

This commit is contained in:
filipriec
2025-03-10 22:52:07 +01:00
parent e235fbd49b
commit fc6f033711
4 changed files with 70 additions and 45 deletions

View File

@@ -6,6 +6,8 @@ use chrono::{DateTime, Utc};
use common::proto::multieko2::tables_data::{PostTableDataRequest, PostTableDataResponse};
use std::collections::HashMap;
use crate::steel::server::execution::{self, Value};
pub async fn post_table_data(
db_pool: &PgPool,
request: PostTableDataRequest,
@@ -112,54 +114,31 @@ pub async fn post_table_data(
.await
.map_err(|e| Status::internal(format!("Failed to fetch scripts: {}", e)))?;
// TODO: Re-implement script validation logic
/*
// TODO SCRIPT EXECUTION NEEDS REDESING
for script_record in scripts {
let target_column = script_record.target_column;
if !data.contains_key(&target_column) {
return Err(Status::invalid_argument(
format!("Column '{}' is required due to an associated script", target_column)
));
}
let operation = execution::parse_script(&script_record.script, &target_column)
.map_err(|e| Status::invalid_argument(e.to_string()))?;
let source_column = match operation {
ScriptOperation::SetToLocalColumn { source } => source,
ScriptOperation::SetToExternalColumn { table, column } => {
let external_source = format!("@{}.{}", table, column);
let resolved_value = execution::resolve_value(
db_pool,
profile_id,
&table_name,
&data,
&external_source
).await.map_err(|e| Status::invalid_argument(e.to_string()))?;
resolved_value
}
};
let source_value = data.get(&source_column)
// Ensure target column exists in submitted data
let user_value = data.get(&target_column)
.ok_or_else(|| Status::invalid_argument(
format!("Source column '{}' required by script for '{}' is missing", source_column, target_column)
format!("Script target column '{}' is required", target_column)
))?;
let target_value = data.get(&target_column)
.ok_or_else(|| Status::invalid_argument(
format!("Target column '{}' is missing in data", target_column)
// Execute the script using your existing implementation
let script_result = execution::execute_script(&script_record.script, "STRING")
.map_err(|e| Status::invalid_argument(
format!("Script execution failed for '{}': {}", target_column, e)
))?;
if target_value != source_value {
return Err(Status::invalid_argument(
format!("Value for '{}' must match '{}' as per script. Expected '{}', got '{}'",
target_column, source_column, source_value, target_value)
));
}
// Compare script result with user input
let Value::String(expected_value) = script_result;
if user_value != &expected_value {
return Err(Status::invalid_argument(format!(
"Validation failed for '{}'. Expected: '{}', Received: '{}'",
target_column, expected_value, user_value
)));
}
}
*/
// Prepare SQL parameters
let mut params = PgArguments::default();