obsidian_cli_inspector/commands/
init.rs1use 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}