use std::collections::HashMap;
use uni_common::{Result, Value};
use uni_query::QueryMetrics;
use crate::api::transaction::CommitResult;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum QueryType {
Cypher,
Locy,
Execute,
}
#[derive(Debug, Clone)]
pub struct HookContext {
pub session_id: String,
pub query_text: String,
pub query_type: QueryType,
pub params: HashMap<String, Value>,
}
#[derive(Debug, Clone)]
pub struct CommitHookContext {
pub session_id: String,
pub tx_id: String,
pub mutation_count: usize,
}
pub trait SessionHook: Send + Sync {
fn before_query(&self, _ctx: &HookContext) -> Result<()> {
Ok(())
}
fn after_query(&self, _ctx: &HookContext, _metrics: &QueryMetrics) {}
fn before_commit(&self, _ctx: &CommitHookContext) -> Result<()> {
Ok(())
}
fn after_commit(&self, _ctx: &CommitHookContext, _result: &CommitResult) {}
}