49 lines
1.6 KiB
Python
Executable File
49 lines
1.6 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
"""Lightweight v4.5 validation checks for a deployed ClientFlow backend."""
|
|
from __future__ import annotations
|
|
|
|
import sys
|
|
|
|
from sqlalchemy import text
|
|
|
|
from app.db import engine, init_db
|
|
|
|
|
|
REQUIRED_TABLES = ["communications", "timeline_events", "tasks", "integration_outbox", "opportunities"]
|
|
REQUIRED_TASK_COLUMNS = ["communication_id", "document_id", "shipment_id", "outbox_id", "priority", "assigned_to"]
|
|
|
|
|
|
def main() -> int:
|
|
init_db()
|
|
with engine.begin() as conn:
|
|
tables = {r[0] for r in conn.execute(text("""
|
|
SELECT table_name
|
|
FROM information_schema.tables
|
|
WHERE table_schema = 'public'
|
|
"""))}
|
|
missing_tables = [t for t in REQUIRED_TABLES if t not in tables]
|
|
|
|
cols = {r[0] for r in conn.execute(text("""
|
|
SELECT column_name
|
|
FROM information_schema.columns
|
|
WHERE table_schema = 'public' AND table_name = 'tasks'
|
|
"""))}
|
|
missing_cols = [c for c in REQUIRED_TASK_COLUMNS if c not in cols]
|
|
|
|
comm_count = conn.execute(text("SELECT COUNT(*) FROM communications")).scalar()
|
|
timeline_count = conn.execute(text("SELECT COUNT(*) FROM timeline_events")).scalar()
|
|
|
|
if missing_tables or missing_cols:
|
|
print("ClientFlow v4.5 validation failed")
|
|
print("Missing tables:", ", ".join(missing_tables) or "none")
|
|
print("Missing task columns:", ", ".join(missing_cols) or "none")
|
|
return 1
|
|
|
|
print("ClientFlow v4.5 validation OK")
|
|
print(f"communications={comm_count} timeline_events={timeline_count}")
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main())
|