use std::sync::Arc;
use crate::db::graph::{GraphDb, SubgraphQueryExt};
use crate::models::{SubgraphDirection, SubgraphQueryOptions, SubgraphResult};
pub const DEFAULT_MAX_NODES: usize = 500;
#[derive(Debug, Clone)]
pub struct SubgraphQueryParams<'a> {
pub entity_name: &'a str,
pub repo_name: &'a str,
pub depth: u32,
pub relationships: &'a [&'a str],
pub direction: SubgraphDirection,
pub max_nodes: Option<usize>,
pub entity_uuid: Option<&'a str>,
pub visible_kinds: Option<&'a [&'a str]>,
}
pub async fn run_get_subgraph(
params: SubgraphQueryParams<'_>,
graph_db: &Arc<GraphDb>,
) -> anyhow::Result<SubgraphResult> {
let max_nodes = params.max_nodes.unwrap_or(DEFAULT_MAX_NODES);
let result = graph_db
.get_entity_subgraph(SubgraphQueryOptions {
entity_name: params.entity_name,
repo_name: params.repo_name,
depth: params.depth,
relationships: params.relationships,
direction: params.direction,
max_nodes,
entity_uuid: params.entity_uuid,
visible_kinds: params.visible_kinds,
})
.await?;
Ok(result)
}