|
|
|
|
@@ -71,7 +71,7 @@ class TranslationRun(Base):
|
|
|
|
|
__tablename__ = "translation_runs"
|
|
|
|
|
|
|
|
|
|
id = Column(String, primary_key=True, default=generate_uuid)
|
|
|
|
|
job_id = Column(String, ForeignKey("translation_jobs.id"), nullable=False, index=True)
|
|
|
|
|
job_id = Column(String, ForeignKey("translation_jobs.id", ondelete="CASCADE"), nullable=False, index=True)
|
|
|
|
|
status = Column(String, nullable=False, default="PENDING") # PENDING, RUNNING, COMPLETED, FAILED, CANCELLED
|
|
|
|
|
trigger_type = Column(String, nullable=True, comment="manual, scheduled, retry, baseline_expired")
|
|
|
|
|
started_at = Column(DateTime, nullable=True)
|
|
|
|
|
@@ -101,7 +101,7 @@ class TranslationBatch(Base):
|
|
|
|
|
__tablename__ = "translation_batches"
|
|
|
|
|
|
|
|
|
|
id = Column(String, primary_key=True, default=generate_uuid)
|
|
|
|
|
run_id = Column(String, ForeignKey("translation_runs.id"), nullable=False, index=True)
|
|
|
|
|
run_id = Column(String, ForeignKey("translation_runs.id", ondelete="CASCADE"), nullable=False, index=True)
|
|
|
|
|
batch_index = Column(Integer, nullable=False)
|
|
|
|
|
status = Column(String, nullable=False, default="PENDING")
|
|
|
|
|
total_records = Column(Integer, default=0)
|
|
|
|
|
@@ -119,8 +119,8 @@ class TranslationRecord(Base):
|
|
|
|
|
__tablename__ = "translation_records"
|
|
|
|
|
|
|
|
|
|
id = Column(String, primary_key=True, default=generate_uuid)
|
|
|
|
|
batch_id = Column(String, ForeignKey("translation_batches.id"), nullable=False, index=True)
|
|
|
|
|
run_id = Column(String, ForeignKey("translation_runs.id"), nullable=False, index=True)
|
|
|
|
|
batch_id = Column(String, ForeignKey("translation_batches.id", ondelete="CASCADE"), nullable=False, index=True)
|
|
|
|
|
run_id = Column(String, ForeignKey("translation_runs.id", ondelete="CASCADE"), nullable=False, index=True)
|
|
|
|
|
source_sql = Column(Text, nullable=True)
|
|
|
|
|
target_sql = Column(Text, nullable=True)
|
|
|
|
|
source_object_type = Column(String, nullable=True) # query, dashboard, chart, dataset
|
|
|
|
|
@@ -151,8 +151,8 @@ class TranslationEvent(Base):
|
|
|
|
|
__tablename__ = "translation_events"
|
|
|
|
|
|
|
|
|
|
id = Column(String, primary_key=True, default=generate_uuid)
|
|
|
|
|
job_id = Column(String, ForeignKey("translation_jobs.id"), nullable=False, index=True)
|
|
|
|
|
run_id = Column(String, ForeignKey("translation_runs.id"), nullable=True, index=True)
|
|
|
|
|
job_id = Column(String, ForeignKey("translation_jobs.id", ondelete="CASCADE"), nullable=False, index=True)
|
|
|
|
|
run_id = Column(String, ForeignKey("translation_runs.id", ondelete="SET NULL"), nullable=True, index=True)
|
|
|
|
|
event_type = Column(String, nullable=False) # JOB_CREATED, JOB_STARTED, JOB_COMPLETED, JOB_FAILED, etc.
|
|
|
|
|
event_data = Column(JSON, nullable=True)
|
|
|
|
|
created_by = Column(String, nullable=True)
|
|
|
|
|
@@ -166,8 +166,8 @@ class TranslationPreviewSession(Base):
|
|
|
|
|
__tablename__ = "translation_preview_sessions"
|
|
|
|
|
|
|
|
|
|
id = Column(String, primary_key=True, default=generate_uuid)
|
|
|
|
|
job_id = Column(String, ForeignKey("translation_jobs.id"), nullable=False, index=True)
|
|
|
|
|
run_id = Column(String, ForeignKey("translation_runs.id"), nullable=True)
|
|
|
|
|
job_id = Column(String, ForeignKey("translation_jobs.id", ondelete="CASCADE"), nullable=False, index=True)
|
|
|
|
|
run_id = Column(String, ForeignKey("translation_runs.id", ondelete="SET NULL"), nullable=True)
|
|
|
|
|
status = Column(String, nullable=False, default="ACTIVE") # ACTIVE, APPLIED, DISCARDED, EXPIRED
|
|
|
|
|
created_by = Column(String, nullable=True)
|
|
|
|
|
created_at = Column(DateTime, default=lambda: datetime.now(UTC))
|
|
|
|
|
@@ -181,7 +181,7 @@ class TranslationPreviewRecord(Base):
|
|
|
|
|
__tablename__ = "translation_preview_records"
|
|
|
|
|
|
|
|
|
|
id = Column(String, primary_key=True, default=generate_uuid)
|
|
|
|
|
session_id = Column(String, ForeignKey("translation_preview_sessions.id"), nullable=False, index=True)
|
|
|
|
|
session_id = Column(String, ForeignKey("translation_preview_sessions.id", ondelete="CASCADE"), nullable=False, index=True)
|
|
|
|
|
source_sql = Column(Text, nullable=True)
|
|
|
|
|
target_sql = Column(Text, nullable=True)
|
|
|
|
|
source_object_type = Column(String, nullable=True)
|
|
|
|
|
@@ -219,7 +219,7 @@ class DictionaryEntry(Base):
|
|
|
|
|
__tablename__ = "dictionary_entries"
|
|
|
|
|
|
|
|
|
|
id = Column(String, primary_key=True, default=generate_uuid)
|
|
|
|
|
dictionary_id = Column(String, ForeignKey("terminology_dictionaries.id"), nullable=False, index=True)
|
|
|
|
|
dictionary_id = Column(String, ForeignKey("terminology_dictionaries.id", ondelete="CASCADE"), nullable=False, index=True)
|
|
|
|
|
source_term = Column(String, nullable=False)
|
|
|
|
|
source_term_normalized = Column(String, nullable=False)
|
|
|
|
|
target_term = Column(String, nullable=False)
|
|
|
|
|
@@ -254,7 +254,7 @@ class TranslationSchedule(Base):
|
|
|
|
|
__tablename__ = "translation_schedules"
|
|
|
|
|
|
|
|
|
|
id = Column(String, primary_key=True, default=generate_uuid)
|
|
|
|
|
job_id = Column(String, ForeignKey("translation_jobs.id"), nullable=False, index=True)
|
|
|
|
|
job_id = Column(String, ForeignKey("translation_jobs.id", ondelete="CASCADE"), nullable=False, index=True)
|
|
|
|
|
cron_expression = Column(String, nullable=False)
|
|
|
|
|
timezone = Column(String, nullable=False, default="UTC")
|
|
|
|
|
is_active = Column(Boolean, default=True)
|
|
|
|
|
@@ -273,8 +273,8 @@ class TranslationJobDictionary(Base):
|
|
|
|
|
__tablename__ = "translation_job_dictionaries"
|
|
|
|
|
|
|
|
|
|
id = Column(String, primary_key=True, default=generate_uuid)
|
|
|
|
|
job_id = Column(String, ForeignKey("translation_jobs.id"), nullable=False, index=True)
|
|
|
|
|
dictionary_id = Column(String, ForeignKey("terminology_dictionaries.id"), nullable=False, index=True)
|
|
|
|
|
job_id = Column(String, ForeignKey("translation_jobs.id", ondelete="CASCADE"), nullable=False, index=True)
|
|
|
|
|
dictionary_id = Column(String, ForeignKey("terminology_dictionaries.id", ondelete="CASCADE"), nullable=False, index=True)
|
|
|
|
|
created_at = Column(DateTime, default=lambda: datetime.now(UTC))
|
|
|
|
|
|
|
|
|
|
__table_args__ = (
|
|
|
|
|
@@ -292,8 +292,8 @@ class MetricSnapshot(Base):
|
|
|
|
|
__tablename__ = "translation_metric_snapshots"
|
|
|
|
|
|
|
|
|
|
id = Column(String, primary_key=True, default=generate_uuid)
|
|
|
|
|
job_id = Column(String, ForeignKey("translation_jobs.id"), nullable=False, index=True)
|
|
|
|
|
run_id = Column(String, ForeignKey("translation_runs.id"), nullable=True, index=True)
|
|
|
|
|
job_id = Column(String, ForeignKey("translation_jobs.id", ondelete="CASCADE"), nullable=False, index=True)
|
|
|
|
|
run_id = Column(String, ForeignKey("translation_runs.id", ondelete="SET NULL"), nullable=True, index=True)
|
|
|
|
|
key_hash = Column(String, nullable=False, comment="Hash of dimension key fields for aggregation")
|
|
|
|
|
config_hash = Column(String, nullable=True, comment="Hash of translation configuration state")
|
|
|
|
|
dict_snapshot_hash = Column(String, nullable=True, comment="Hash of dictionary state at capture time")
|
|
|
|
|
@@ -324,7 +324,7 @@ class TranslationLanguage(Base):
|
|
|
|
|
__tablename__ = "translation_languages"
|
|
|
|
|
|
|
|
|
|
id = Column(String, primary_key=True, default=generate_uuid)
|
|
|
|
|
record_id = Column(String, ForeignKey("translation_records.id"), nullable=False)
|
|
|
|
|
record_id = Column(String, ForeignKey("translation_records.id", ondelete="CASCADE"), nullable=False)
|
|
|
|
|
language_code = Column(String, nullable=False, comment="BCP-47 language code")
|
|
|
|
|
source_language_detected = Column(String, nullable=True, comment="BCP-47 or 'und' for undetermined")
|
|
|
|
|
translated_value = Column(Text, nullable=True, comment="LLM-generated translation")
|
|
|
|
|
@@ -352,7 +352,7 @@ class TranslationPreviewLanguage(Base):
|
|
|
|
|
__tablename__ = "translation_preview_languages"
|
|
|
|
|
|
|
|
|
|
id = Column(String, primary_key=True, default=generate_uuid)
|
|
|
|
|
preview_record_id = Column(String, ForeignKey("translation_preview_records.id"), nullable=False)
|
|
|
|
|
preview_record_id = Column(String, ForeignKey("translation_preview_records.id", ondelete="CASCADE"), nullable=False)
|
|
|
|
|
language_code = Column(String, nullable=False, comment="BCP-47 language code")
|
|
|
|
|
source_language_detected = Column(String, nullable=True, comment="BCP-47 or 'und'")
|
|
|
|
|
translated_value = Column(Text, nullable=True)
|
|
|
|
|
@@ -376,7 +376,7 @@ class TranslationRunLanguageStats(Base):
|
|
|
|
|
__tablename__ = "translation_run_language_stats"
|
|
|
|
|
|
|
|
|
|
id = Column(String, primary_key=True, default=generate_uuid)
|
|
|
|
|
run_id = Column(String, ForeignKey("translation_runs.id"), nullable=False)
|
|
|
|
|
run_id = Column(String, ForeignKey("translation_runs.id", ondelete="CASCADE"), nullable=False)
|
|
|
|
|
language_code = Column(String, nullable=False, comment="BCP-47 language code")
|
|
|
|
|
total_rows = Column(Integer, default=0)
|
|
|
|
|
translated_rows = Column(Integer, default=0)
|
|
|
|
|
|