compiled steel engine
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user