rustpbx 0.4.3

A SIP PBX implementation in Rust
Documentation
use sea_orm::sea_query::TableCreateStatement;
/// Dump MySQL CREATE TABLE DDL for all entities defined in rustpbx.
///
/// Usage (core tables only):
///   cargo run --bin dump-mysql-schema
///
/// Usage (all tables including all addons / commerce edition):
///   cargo run --bin dump-mysql-schema --features "commerce,opus"
///
/// Redirect to a .sql file for DBA review before manual deployment:
///   cargo run --bin dump-mysql-schema --features "commerce,opus" > schema.sql
///
/// NOTE: This generates CREATE TABLE statements from entity definitions only.
///       Indices are NOT included. Review migration files under
///       src/models/ and src/addons/*/migration/ for CREATE INDEX statements.
use sea_orm::{DbBackend, Schema};

fn build_sql(stmt: &TableCreateStatement) -> String {
    let db = DbBackend::MySql;
    let s = db.build(stmt);
    format!("{};\n", s.sql)
}

fn main() {
    let schema = Schema::new(DbBackend::MySql);

    println!("-- ============================================================");
    println!("-- rustpbx MySQL schema dump");
    println!("-- Generated by: cargo run --example dump_mysql_schema");
    println!("-- ============================================================\n");

    // ------------------------------------------------------------------ core
    println!("-- ---- core models ----\n");

    use rustpbx::models;

    print!(
        "{}",
        build_sql(&schema.create_table_from_entity(models::user::Entity))
    );
    print!(
        "{}",
        build_sql(&schema.create_table_from_entity(models::department::Entity))
    );
    print!(
        "{}",
        build_sql(&schema.create_table_from_entity(models::extension::Entity))
    );
    print!(
        "{}",
        build_sql(&schema.create_table_from_entity(models::extension_department::Entity))
    );
    print!(
        "{}",
        build_sql(&schema.create_table_from_entity(models::sip_trunk::Entity))
    );
    print!(
        "{}",
        build_sql(&schema.create_table_from_entity(models::presence::Entity))
    );
    print!(
        "{}",
        build_sql(&schema.create_table_from_entity(models::routing::Entity))
    );
    print!(
        "{}",
        build_sql(&schema.create_table_from_entity(models::call_record::Entity))
    );
    print!(
        "{}",
        build_sql(&schema.create_table_from_entity(models::frequency_limit::Entity))
    );
    print!(
        "{}",
        build_sql(&schema.create_table_from_entity(models::system_notification::Entity))
    );

    // RBAC: multiple entities in one module
    use rustpbx::models::rbac;
    print!(
        "{}",
        build_sql(&schema.create_table_from_entity(rbac::Entity))
    ); // rustpbx_roles
    print!(
        "{}",
        build_sql(&schema.create_table_from_entity(rbac::user_role::Entity))
    );
    print!(
        "{}",
        build_sql(&schema.create_table_from_entity(rbac::role_permission::Entity))
    );

    // ------------------------------------------------------------------ queue (always compiled)
    println!("\n-- ---- queue ----\n");
    use rustpbx::addons::queue;
    print!(
        "{}",
        build_sql(&schema.create_table_from_entity(queue::models::Entity))
    );

    // ------------------------------------------------------------------ wholesale
    #[cfg(feature = "addon-wholesale")]
    {
        println!("\n-- ---- wholesale ----\n");
        use rustpbx::addons::wholesale::models;
        print!(
            "{}",
            build_sql(&schema.create_table_from_entity(models::tenant::Entity))
        );
        print!(
            "{}",
            build_sql(&schema.create_table_from_entity(models::recharge_log::Entity))
        );
        print!(
            "{}",
            build_sql(&schema.create_table_from_entity(models::tenant_trunk::Entity))
        );
        print!(
            "{}",
            build_sql(&schema.create_table_from_entity(models::routing_profile::Entity))
        );
        print!(
            "{}",
            build_sql(&schema.create_table_from_entity(models::routing_profile_item::Entity))
        );
        print!(
            "{}",
            build_sql(&schema.create_table_from_entity(models::wholesale_cdr::Entity))
        );
        print!(
            "{}",
            build_sql(&schema.create_table_from_entity(models::rate_deck::Entity))
        );
        print!(
            "{}",
            build_sql(&schema.create_table_from_entity(models::rate::Entity))
        );
        print!(
            "{}",
            build_sql(&schema.create_table_from_entity(models::wholesale_trunk_config::Entity))
        );
        print!(
            "{}",
            build_sql(&schema.create_table_from_entity(models::bill::Entity))
        );
        print!(
            "{}",
            build_sql(&schema.create_table_from_entity(models::bill_setting::Entity))
        );
        print!(
            "{}",
            build_sql(&schema.create_table_from_entity(models::global_setting::Entity))
        );
        print!(
            "{}",
            build_sql(&schema.create_table_from_entity(models::export_task::Entity))
        );
        print!(
            "{}",
            build_sql(&schema.create_table_from_entity(models::trunk_daily_stats::Entity))
        );
        print!(
            "{}",
            build_sql(&schema.create_table_from_entity(models::permission::Entity))
        );
        print!(
            "{}",
            build_sql(&schema.create_table_from_entity(models::sales_tenant_access::Entity))
        );
        print!(
            "{}",
            build_sql(&schema.create_table_from_entity(models::wholesale_agent::Entity))
        );
        print!(
            "{}",
            build_sql(
                &schema.create_table_from_entity(models::wholesale_agent::tenant_discount::Entity)
            )
        );
    }

    // ------------------------------------------------------------------ endpoint-manager
    #[cfg(feature = "addon-endpoint-manager")]
    {
        println!("\n-- ---- endpoint_manager ----\n");
        use rustpbx::addons::endpoint_manager;
        print!(
            "{}",
            build_sql(&schema.create_table_from_entity(endpoint_manager::models::Entity))
        );
    }

    // ------------------------------------------------------------------ enterprise-auth
    #[cfg(feature = "addon-enterprise-auth")]
    {
        println!("\n-- ---- enterprise_auth ----\n");
        use rustpbx::addons::enterprise_auth;
        print!(
            "{}",
            build_sql(&schema.create_table_from_entity(enterprise_auth::settings::Entity))
        );
    }

    // ------------------------------------------------------------------ voicemail
    #[cfg(feature = "addon-voicemail")]
    {
        println!("\n-- ---- voicemail ----\n");
        use rustpbx::addons::voicemail::models;
        print!(
            "{}",
            build_sql(&schema.create_table_from_entity(models::mailbox::Entity))
        );
        print!(
            "{}",
            build_sql(&schema.create_table_from_entity(models::message::Entity))
        );
    }

    // ------------------------------------------------------------------ ivr-editor
    #[cfg(feature = "addon-ivr-editor")]
    {
        println!("\n-- ---- ivr_editor ----\n");
        use rustpbx::addons::ivr_editor;
        print!(
            "{}",
            build_sql(&schema.create_table_from_entity(ivr_editor::models::Entity))
        );
        print!(
            "{}",
            build_sql(
                &schema.create_table_from_entity(ivr_editor::models::version_history::Entity)
            )
        );
    }

    println!("\n-- ============================================================");
    println!("-- NOTE: indices are NOT included above.");
    println!("-- Review migration files under src/models/ and src/addons/*/migration/");
    println!("-- for CREATE INDEX / ALTER TABLE statements.");
    println!("-- ============================================================");
}