pgmt 0.5.0

PostgreSQL migration tool that keeps your schema files as the source of truth
Documentation
use crate::catalog::Catalog;
use crate::config::Config;
use crate::validation::{ValidationConfig, validate_database_against_schema_files};
use anyhow::{Result, anyhow};
use std::path::Path;

pub async fn cmd_validate(
    config: &Config,
    root_dir: &Path,
    dev: &crate::config::DevUrl,
    shadow: &crate::config::ShadowDatabase,
) -> Result<()> {
    println!("🔍 Validating schema consistency...");

    let dev_pool =
        crate::db::connection::connect_to_database(dev.as_str(), "development database").await?;

    println!("📊 Loading current database schema...");
    let filter = crate::config::filter::ObjectFilter::from_config(config);
    let db_catalog = Catalog::load_managed(&dev_pool, &filter).await?;

    let validation_config = ValidationConfig::default();

    let result = validate_database_against_schema_files(
        &db_catalog,
        config,
        root_dir,
        &validation_config,
        shadow,
    )
    .await?;

    if result.passed {
        println!("{}", result.message);
        Ok(())
    } else {
        println!("{}", result.message);
        Err(anyhow!(
            "Schema validation failed: database does not match expected schema"
        ))
    }
}