diff options
Diffstat (limited to 'src/bin/migrate.rs')
| -rw-r--r-- | src/bin/migrate.rs | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/src/bin/migrate.rs b/src/bin/migrate.rs new file mode 100644 index 0000000..9afdbf0 --- /dev/null +++ b/src/bin/migrate.rs @@ -0,0 +1,61 @@ +use anyhow::Result; +use rusqlite::Connection; +use sts::{Config, MigrationRunner}; +use std::env; + +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: i32 = 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 <version> # Rollback to version"); + 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 0"); +}
\ No newline at end of file |
