use super::core::DbOperations;
use crate::schema::types::Transform;
use crate::schema::SchemaError;
impl DbOperations {
pub async fn sync_transform_state(
&self,
registered_transforms: &std::collections::HashMap<String, Transform>,
schema_field_to_transforms: &std::collections::BTreeMap<
String,
std::collections::HashSet<String>,
>,
) -> Result<(), SchemaError> {
use crate::storage::traits::TypedStore;
for (id, transform) in registered_transforms {
self.transforms_store()
.put_item(id, transform)
.await
.map_err(|e| {
SchemaError::InvalidData(format!("Failed to store transform {}: {}", id, e))
})?;
}
self.transforms_store()
.put_item("__schema_field_mappings__", schema_field_to_transforms)
.await
.map_err(|e| {
SchemaError::InvalidData(format!("Failed to store transform mappings: {}", e))
})?;
self.transforms_store()
.inner()
.flush()
.await
.map_err(|e| SchemaError::InvalidData(format!("Failed to flush transforms: {}", e)))?;
Ok(())
}
pub async fn load_transform_state(
&self,
) -> Result<
(
std::collections::HashMap<String, Transform>,
std::collections::BTreeMap<String, std::collections::HashSet<String>>,
),
SchemaError,
> {
use crate::storage::traits::TypedStore;
let keys = match self.transforms_store().list_keys_with_prefix("").await {
Ok(k) => k,
Err(_) => {
return Ok((
std::collections::HashMap::new(),
std::collections::BTreeMap::new(),
));
}
};
let mut transforms = std::collections::HashMap::new();
for key in keys {
if key == "__schema_field_mappings__" {
continue; }
match self.transforms_store().get_item::<Transform>(&key).await {
Ok(Some(transform)) => {
transforms.insert(key, transform);
}
Ok(None) => {
}
Err(e) => {
log::warn!(
"Failed to deserialize transform {} (possibly old format): {}",
key,
e
);
}
}
}
let mappings = match self
.transforms_store()
.get_item("__schema_field_mappings__")
.await
{
Ok(Some(m)) => m,
Ok(None) => {
log::info!("No transform mappings found - starting with empty state");
std::collections::BTreeMap::new()
}
Err(e) => {
log::warn!(
"Failed to load transform mappings (possibly old format): {}",
e
);
std::collections::BTreeMap::new()
}
};
Ok((transforms, mappings))
}
}