""" Rotina dedicada de bootstrap do banco administrativo. Cria tabelas do dominio administrativo de forma explicita, fora do startup do app. """ from sqlalchemy import inspect, text from admin_app.db.database import AdminBase, admin_engine from admin_app.db.models import AuditLog, StaffAccount, StaffSession, ToolArtifact, ToolDraft, ToolMetadata, ToolVersion _REGISTERED_MODELS = (AuditLog, StaffAccount, StaffSession, ToolArtifact, ToolDraft, ToolMetadata, ToolVersion) def _ensure_admin_schema_evolution() -> None: inspector = inspect(admin_engine) table_names = set(inspector.get_table_names()) if "tool_drafts" in table_names: tool_draft_columns = {column["name"] for column in inspector.get_columns("tool_drafts")} statements: list[str] = [] if "current_version_number" not in tool_draft_columns: statements.append("ALTER TABLE tool_drafts ADD COLUMN current_version_number INT NOT NULL DEFAULT 1") if "version_count" not in tool_draft_columns: statements.append("ALTER TABLE tool_drafts ADD COLUMN version_count INT NOT NULL DEFAULT 1") if statements: with admin_engine.begin() as connection: for statement in statements: connection.execute(text(statement)) def bootstrap_admin_database() -> None: """Cria o schema administrativo sem executar seed implicita.""" print("Inicializando schema administrativo...") try: AdminBase.metadata.create_all(bind=admin_engine) _ensure_admin_schema_evolution() except Exception as exc: raise RuntimeError(f"Falha ao inicializar banco administrativo: {exc}") from exc print("Schema administrativo inicializado com sucesso!") def main() -> None: bootstrap_admin_database() if __name__ == "__main__": main()