migrate_call_analysis.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. from pathlib import Path
  2. import sqlite3
  3. DB = Path("data/telephony.sqlite3")
  4. DB.parent.mkdir(parents=True, exist_ok=True)
  5. con = sqlite3.connect(DB)
  6. con.execute("PRAGMA foreign_keys = ON")
  7. # Bestehende calls-Tabelle NICHT verändern.
  8. # Die historische Recording-ID wird im Transcript-Datensatz gespeichert.
  9. con.executescript("""
  10. CREATE TABLE IF NOT EXISTS transcripts (
  11. id INTEGER PRIMARY KEY AUTOINCREMENT,
  12. call_id INTEGER NOT NULL,
  13. rec_id INTEGER,
  14. model TEXT NOT NULL,
  15. language TEXT,
  16. audio_codec TEXT,
  17. audio_channels INTEGER,
  18. audio_sample_rate INTEGER,
  19. audio_duration REAL,
  20. transcript_json TEXT NOT NULL,
  21. status TEXT NOT NULL DEFAULT 'completed',
  22. created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
  23. FOREIGN KEY(call_id)
  24. REFERENCES calls(id)
  25. ON DELETE CASCADE
  26. );
  27. CREATE INDEX IF NOT EXISTS idx_transcripts_call_id
  28. ON transcripts(call_id);
  29. CREATE INDEX IF NOT EXISTS idx_transcripts_rec_id
  30. ON transcripts(rec_id);
  31. CREATE TABLE IF NOT EXISTS analyses (
  32. id INTEGER PRIMARY KEY AUTOINCREMENT,
  33. call_id INTEGER NOT NULL,
  34. transcript_id INTEGER NOT NULL,
  35. model TEXT NOT NULL,
  36. schema_version TEXT NOT NULL DEFAULT '1.0',
  37. analysis_json TEXT NOT NULL,
  38. status TEXT NOT NULL DEFAULT 'completed',
  39. created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
  40. FOREIGN KEY(call_id)
  41. REFERENCES calls(id)
  42. ON DELETE CASCADE,
  43. FOREIGN KEY(transcript_id)
  44. REFERENCES transcripts(id)
  45. ON DELETE CASCADE
  46. );
  47. CREATE INDEX IF NOT EXISTS idx_analyses_call_id
  48. ON analyses(call_id);
  49. CREATE INDEX IF NOT EXISTS idx_analyses_transcript_id
  50. ON analyses(transcript_id);
  51. """)
  52. con.commit()
  53. print("Migration erfolgreich.")
  54. print()
  55. print("Tabellen:")
  56. for row in con.execute("""
  57. SELECT name
  58. FROM sqlite_master
  59. WHERE type = 'table'
  60. ORDER BY name
  61. """):
  62. print(" ", row[0])
  63. print()
  64. print("Bestehende Calls:", end=" ")
  65. count = con.execute(
  66. "SELECT COUNT(*) FROM calls"
  67. ).fetchone()[0]
  68. print(count)
  69. con.close()