summaryrefslogtreecommitdiff
path: root/src/bin/migrate.rs
blob: fbf5183d08266a6966a48201678347a9dfe7434d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
use anyhow::Result;
use rusqlite::Connection;
use std::env;
use sts::{Config, MigrationRunner};

fn main() -> Result<()> {
    let args: Vec<String> = env::args().collect();

    if args.len() < 2 {
        print_usage();
        return Ok(());
    }

    let config = Config::from_env();
    let conn = Connection::open(&config.database_path)?;
    let runner = MigrationRunner::new(&conn)?;

    match args[1].as_str() {
        "up" => {
            println!("Running migrations...");
            runner.run_migrations()?;
        }
        "status" => {
            runner.show_migration_status()?;
        }
        "rollback" => {
            if args.len() < 3 {
                eprintln!("Error: rollback requires a version number");
                eprintln!("Usage: cargo run --bin migrate rollback <version>");
                return Ok(());
            }
            let version: i64 = args[2]
                .parse()
                .map_err(|_| anyhow::anyhow!("Invalid version number: {}", args[2]))?;
            runner.rollback_to_version(version)?;
        }
        _ => {
            eprintln!("Error: Unknown command '{}'", args[1]);
            print_usage();
        }
    }

    Ok(())
}

fn print_usage() {
    println!("OAuth2 STS Migration Tool");
    println!("========================");
    println!("");
    println!("Usage:");
    println!("  cargo run --bin migrate up       # Run pending migrations");
    println!("  cargo run --bin migrate status   # Show migration status");
    println!("  cargo run --bin migrate rollback <timestamp> # Rollback to timestamp");
    println!("");
    println!("Environment Variables:");
    println!("  DATABASE_PATH   Path to SQLite database (default: oauth.db)");
    println!("");
    println!("Examples:");
    println!("  cargo run --bin migrate up");
    println!("  cargo run --bin migrate status");
    println!("  cargo run --bin migrate rollback 20231201120000");
}