You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
2.4 KiB
Python
61 lines
2.4 KiB
Python
"""
|
|
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 "generation_model" not in tool_draft_columns:
|
|
statements.append("ALTER TABLE tool_drafts ADD COLUMN generation_model VARCHAR(120)")
|
|
if statements:
|
|
with admin_engine.begin() as connection:
|
|
for statement in statements:
|
|
connection.execute(text(statement))
|
|
|
|
if "tool_versions" in table_names:
|
|
tool_version_columns = {column["name"] for column in inspector.get_columns("tool_versions")}
|
|
statements = []
|
|
if "generation_model" not in tool_version_columns:
|
|
statements.append("ALTER TABLE tool_versions ADD COLUMN generation_model VARCHAR(120)")
|
|
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()
|