use uuid::Uuid;
use crate::store::memory::{
MemoryArtifactStore, MemoryEmbeddingStore, MemoryExecutionStore, MemorySessionStore,
};
use crate::store::{ArtifactStore, EmbeddingStore, ExecutionStore, SessionStore, StoreResult};
#[derive(Default)]
pub struct MemoryStore {
pub sessions: MemorySessionStore,
pub embeddings: MemoryEmbeddingStore,
pub artifacts: MemoryArtifactStore,
pub executions: MemoryExecutionStore,
}
impl MemoryStore {
#[must_use]
pub fn new() -> Self {
Self::default()
}
pub async fn delete_session_cascading(&self, id: &Uuid) -> StoreResult<()> {
let mut errors: Vec<String> = Vec::new();
if let Err(e) = self.sessions.delete_session(id).await {
errors.push(format!("sessions: {e}"));
}
if let Err(e) = self.embeddings.delete_by_session(id).await {
errors.push(format!("embeddings: {e}"));
}
if let Err(e) = self.artifacts.delete_by_session(id).await {
errors.push(format!("artifacts: {e}"));
}
if let Err(e) = self.executions.delete_by_session(id).await {
errors.push(format!("executions: {e}"));
}
if errors.is_empty() {
Ok(())
} else {
Err(crate::error::StorageError::BackendError {
backend: "memory".to_owned(),
message: format!("cascade delete failed: {}", errors.join("; ")),
source: None,
})
}
}
}