obsidian-cli-inspector 0.2.2

Local-first CLI/TUI for indexing and querying Obsidian vaults
Documentation
use anyhow::{Context, Result};

use crate::config::Config;
use crate::db::Database;
use crate::logger::Logger;

pub fn initialize_database(config: &Config, force: bool, logger: Option<&Logger>) -> Result<()> {
    let db_path = config.database_path();

    if let Some(parent) = db_path.parent() {
        std::fs::create_dir_all(parent).with_context(|| {
            format!("Failed to create database directory: {}", parent.display())
        })?;
    }

    let msg = format!("Initializing database at: {}", db_path.display());
    if let Some(log) = logger {
        let _ = log.print_and_log("init", &msg);
    } else {
        println!("{msg}");
    }

    let db = Database::open(&db_path)
        .with_context(|| format!("Failed to open database: {}", db_path.display()))?;

    db.initialize(force)
        .context("Failed to initialize database schema")?;

    let version = db.get_version()?.unwrap_or(0);
    let msg = format!("Database initialized successfully (schema version: {version})");
    if let Some(log) = logger {
        let _ = log.print_and_log("init", &msg);
    } else {
        println!("{msg}");
    }

    Ok(())
}