use tauri_plugin_sql::{Migration, MigrationKind}; pub fn run() { let migrations = vec![ Migration { version: 1, description: "full schema v1", sql: r#" PRAGMA foreign_keys = ON; CREATE TABLE IF NOT EXISTS profile ( key TEXT PRIMARY KEY, value TEXT ); CREATE TABLE IF NOT EXISTS products ( id INTEGER PRIMARY KEY, name TEXT NOT NULL, brand TEXT, category TEXT, weight_g REAL, kcal_per_100g REAL, protein_per_100g REAL, fat_per_100g REAL, carbs_per_100g REAL, fiber_per_100g REAL, vit_a_mcg REAL, vit_c_mg REAL, vit_d_mcg REAL, vit_e_mg REAL, vit_k_mcg REAL, vit_b1_mg REAL, vit_b2_mg REAL, vit_b3_mg REAL, vit_b6_mg REAL, vit_b12_mcg REAL, folate_mcg REAL, calcium_mg REAL, iron_mg REAL, magnesium_mg REAL, zinc_mg REAL, copper_mg REAL, selenium_mcg REAL, potassium_mg REAL, sodium_mg REAL, source TEXT, store_id TEXT, image_path TEXT, created_at TEXT DEFAULT (datetime('now','localtime')) ); CREATE TABLE IF NOT EXISTS supplements ( id INTEGER PRIMARY KEY, name TEXT NOT NULL, daily_dose_g REAL, vit_a_mcg REAL, vit_c_mg REAL, vit_d_mcg REAL, vit_e_mg REAL, vit_k_mcg REAL, vit_b1_mg REAL, vit_b2_mg REAL, vit_b3_mg REAL, vit_b6_mg REAL, vit_b12_mcg REAL, folate_mcg REAL, calcium_mg REAL, iron_mg REAL, magnesium_mg REAL, zinc_mg REAL, copper_mg REAL, selenium_mcg REAL, potassium_mg REAL, sodium_mg REAL ); CREATE TABLE IF NOT EXISTS recipes ( id INTEGER PRIMARY KEY, name TEXT NOT NULL, cooking_method TEXT, cooking_temp_c INTEGER, servings INTEGER DEFAULT 1, notes TEXT ); CREATE TABLE IF NOT EXISTS recipe_ingredients ( id INTEGER PRIMARY KEY, recipe_id INTEGER NOT NULL REFERENCES recipes(id) ON DELETE CASCADE, product_id INTEGER NOT NULL REFERENCES products(id), amount_g REAL NOT NULL ); CREATE TABLE IF NOT EXISTS weight_log ( id INTEGER PRIMARY KEY, date TEXT NOT NULL, time TEXT, weight_kg REAL NOT NULL ); CREATE TABLE IF NOT EXISTS sleep_log ( id INTEGER PRIMARY KEY, date TEXT NOT NULL, bed_time TEXT, asleep_time TEXT, wake_time TEXT, nap_minutes INTEGER DEFAULT 0, notes TEXT ); CREATE TABLE IF NOT EXISTS food_log ( id INTEGER PRIMARY KEY, date TEXT NOT NULL, time TEXT, product_id INTEGER REFERENCES products(id), recipe_id INTEGER REFERENCES recipes(id), amount_g REAL NOT NULL, kcal REAL, protein_g REAL, fat_g REAL, carbs_g REAL, fiber_g REAL, note TEXT ); CREATE TABLE IF NOT EXISTS supplement_log ( id INTEGER PRIMARY KEY, date TEXT NOT NULL, time TEXT, supplement_id INTEGER NOT NULL REFERENCES supplements(id), dose_g REAL ); CREATE TABLE IF NOT EXISTS gps_sessions ( id INTEGER PRIMARY KEY, date TEXT NOT NULL, start_time TEXT, end_time TEXT, activity_type TEXT, total_distance_m REAL, total_kcal REAL, avg_speed_kmh REAL, max_speed_kmh REAL, elevation_gain_m REAL, elevation_loss_m REAL, source TEXT ); CREATE TABLE IF NOT EXISTS gps_points ( id INTEGER PRIMARY KEY, session_id INTEGER NOT NULL REFERENCES gps_sessions(id) ON DELETE CASCADE, ts TEXT NOT NULL, lat REAL NOT NULL, lon REAL NOT NULL, altitude_gps_m REAL, altitude_srtm_m REAL, speed_ms REAL, heart_rate INTEGER ); CREATE TABLE IF NOT EXISTS activity_log ( id INTEGER PRIMARY KEY, date TEXT NOT NULL, time TEXT, type TEXT, desc TEXT, minutes INTEGER, kcal REAL, gps_session_id INTEGER REFERENCES gps_sessions(id) ); CREATE INDEX IF NOT EXISTS idx_food_log_date ON food_log(date); CREATE INDEX IF NOT EXISTS idx_activity_log_date ON activity_log(date); CREATE INDEX IF NOT EXISTS idx_weight_log_date ON weight_log(date); CREATE INDEX IF NOT EXISTS idx_sleep_log_date ON sleep_log(date); CREATE INDEX IF NOT EXISTS idx_gps_points_sess ON gps_points(session_id); CREATE INDEX IF NOT EXISTS idx_products_name ON products(name COLLATE NOCASE); "#, kind: MigrationKind::Up, }, Migration { version: 2, description: "add composition column to products", sql: "ALTER TABLE products ADD COLUMN composition TEXT;", kind: MigrationKind::Up, }, ]; tauri::Builder::default() .plugin( tauri_plugin_sql::Builder::default() .add_migrations("sqlite:baldav.db", migrations) .build(), ) .run(tauri::generate_context!()) .expect("error while running tauri application"); }