Skip to main content

obsidian_cli_inspector/commands/
init.rs

1use anyhow::{Context, Result};
2
3use crate::config::Config;
4use crate::db::Database;
5use crate::logger::Logger;
6
7pub fn initialize_database(config: &Config, force: bool, logger: Option<&Logger>) -> Result<()> {
8    let db_path = config.database_path();
9
10    if let Some(parent) = db_path.parent() {
11        std::fs::create_dir_all(parent).with_context(|| {
12            format!("Failed to create database directory: {}", parent.display())
13        })?;
14    }
15
16    let msg = format!("Initializing database at: {}", db_path.display());
17    if let Some(log) = logger {
18        let _ = log.print_and_log("init", &msg);
19    } else {
20        println!("{msg}");
21    }
22
23    let db = Database::open(&db_path)
24        .with_context(|| format!("Failed to open database: {}", db_path.display()))?;
25
26    db.initialize(force)
27        .context("Failed to initialize database schema")?;
28
29    let version = db.get_version()?.unwrap_or(0);
30    let msg = format!("Database initialized successfully (schema version: {version})");
31    if let Some(log) = logger {
32        let _ = log.print_and_log("init", &msg);
33    } else {
34        println!("{msg}");
35    }
36
37    Ok(())
38}