125 lines
3.3 KiB
Rust
125 lines
3.3 KiB
Rust
use anyhow::Result;
|
|
use crate::api::ApiClient;
|
|
use crate::output::{self, OutputFormat};
|
|
use crate::ui;
|
|
|
|
pub fn list(
|
|
client: &ApiClient,
|
|
bank_id: &str,
|
|
limit: i64,
|
|
verbose: bool,
|
|
output_format: OutputFormat,
|
|
) -> Result<()> {
|
|
let spinner = if output_format == OutputFormat::Pretty {
|
|
Some(ui::create_spinner("Fetching entities..."))
|
|
} else {
|
|
None
|
|
};
|
|
|
|
let response = client.list_entities(bank_id, Some(limit), verbose)?;
|
|
|
|
if let Some(mut sp) = spinner {
|
|
sp.finish();
|
|
}
|
|
|
|
if output_format == OutputFormat::Pretty {
|
|
ui::print_section_header(&format!("Entities for Bank: {}", bank_id));
|
|
|
|
if response.items.is_empty() {
|
|
ui::print_warning("No entities found");
|
|
return Ok(());
|
|
}
|
|
|
|
println!("Total entities: {}\n", response.items.len());
|
|
|
|
for entity in &response.items {
|
|
println!("ID: {}", entity.id);
|
|
println!(" Name: {}", entity.canonical_name);
|
|
println!(" Mentions: {}", entity.mention_count);
|
|
if let Some(first_seen) = &entity.first_seen {
|
|
println!(" First seen: {}", first_seen);
|
|
}
|
|
if let Some(last_seen) = &entity.last_seen {
|
|
println!(" Last seen: {}", last_seen);
|
|
}
|
|
println!();
|
|
}
|
|
} else {
|
|
output::print_output(&response, output_format)?;
|
|
}
|
|
|
|
Ok(())
|
|
}
|
|
|
|
pub fn get(
|
|
client: &ApiClient,
|
|
bank_id: &str,
|
|
entity_id: &str,
|
|
verbose: bool,
|
|
output_format: OutputFormat,
|
|
) -> Result<()> {
|
|
let spinner = if output_format == OutputFormat::Pretty {
|
|
Some(ui::create_spinner("Fetching entity details..."))
|
|
} else {
|
|
None
|
|
};
|
|
|
|
let response = client.get_entity(bank_id, entity_id, verbose)?;
|
|
|
|
if let Some(mut sp) = spinner {
|
|
sp.finish();
|
|
}
|
|
|
|
if output_format == OutputFormat::Pretty {
|
|
ui::print_section_header(&format!("Entity: {}", entity_id));
|
|
|
|
println!("ID: {}", response.id);
|
|
println!("Name: {}", response.canonical_name);
|
|
println!("Mentions: {}", response.mention_count);
|
|
|
|
if let Some(first_seen) = &response.first_seen {
|
|
println!("First seen: {}", first_seen);
|
|
}
|
|
if let Some(last_seen) = &response.last_seen {
|
|
println!("Last seen: {}", last_seen);
|
|
}
|
|
|
|
println!();
|
|
} else {
|
|
output::print_output(&response, output_format)?;
|
|
}
|
|
|
|
Ok(())
|
|
}
|
|
|
|
pub fn regenerate(
|
|
client: &ApiClient,
|
|
bank_id: &str,
|
|
entity_id: &str,
|
|
verbose: bool,
|
|
output_format: OutputFormat,
|
|
) -> Result<()> {
|
|
let spinner = if output_format == OutputFormat::Pretty {
|
|
Some(ui::create_spinner("Regenerating entity observations..."))
|
|
} else {
|
|
None
|
|
};
|
|
|
|
let response = client.regenerate_entity(bank_id, entity_id, verbose)?;
|
|
|
|
if let Some(mut sp) = spinner {
|
|
sp.finish();
|
|
}
|
|
|
|
if output_format == OutputFormat::Pretty {
|
|
ui::print_success(&format!("Successfully regenerated observations for entity: {}", entity_id));
|
|
println!("\nUpdated entity:");
|
|
println!(" Name: {}", response.canonical_name);
|
|
println!(" Mentions: {}", response.mention_count);
|
|
println!(" Observations: {}", response.observations.len());
|
|
} else {
|
|
output::print_output(&response, output_format)?;
|
|
}
|
|
|
|
Ok(())
|
|
}
|