fix: add tts_failed and render_failed to MongoDB schema validator
MongoDB was rejecting status updates to 'tts_failed' and 'render_failed' because these values weren't in the schema validator's enum, even though they were defined in the Python JobStatus model. This caused TTS failures to leave jobs stuck in 'tts_generating' status with no error feedback to users - the WriteError from MongoDB prevented the status and error fields from being updated. The migration adds both failed statuses to the jobs collection validator. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
83e4752327
commit
76c4c60b0d
1 changed files with 114 additions and 0 deletions
|
|
@ -0,0 +1,114 @@
|
|||
"""Add tts_failed and render_failed statuses to jobs collection validator.
|
||||
|
||||
These statuses were defined in the Python model but missing from the MongoDB
|
||||
schema validation, causing WriteError when setting job status to failed states.
|
||||
"""
|
||||
|
||||
from app.migrations.migrator import Migration
|
||||
|
||||
|
||||
class Migration(Migration):
|
||||
"""Update MongoDB schema validator to support tts_failed and render_failed statuses."""
|
||||
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self.version = "2026-01-05-000000"
|
||||
self.description = "Add tts_failed and render_failed statuses to jobs collection"
|
||||
|
||||
async def up(self) -> None:
|
||||
"""Update the jobs collection validator to include failed statuses."""
|
||||
|
||||
# Define updated schema validator with failed statuses
|
||||
validator = {
|
||||
"$jsonSchema": {
|
||||
"bsonType": "object",
|
||||
"required": ["_id", "title", "status", "client_id", "created_at", "updated_at"],
|
||||
"properties": {
|
||||
"_id": {"bsonType": "string"},
|
||||
"title": {"bsonType": "string"},
|
||||
"status": {
|
||||
"enum": [
|
||||
"created",
|
||||
"ingesting",
|
||||
"ai_processing",
|
||||
"pending_qc",
|
||||
"approved_english",
|
||||
"approved_source",
|
||||
"rejected",
|
||||
"qc_feedback",
|
||||
"translating",
|
||||
"tts_generating",
|
||||
"tts_failed", # NEW: TTS synthesis failed after retries
|
||||
"rendering_video",
|
||||
"render_failed", # NEW: Accessible video rendering failed
|
||||
"pending_final_review",
|
||||
"completed"
|
||||
]
|
||||
},
|
||||
"client_id": {"bsonType": "string"},
|
||||
"created_at": {"bsonType": "date"},
|
||||
"updated_at": {"bsonType": "date"}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Update the collection validator
|
||||
try:
|
||||
await self.db.command({
|
||||
"collMod": "jobs",
|
||||
"validator": validator,
|
||||
"validationLevel": "moderate",
|
||||
"validationAction": "error"
|
||||
})
|
||||
print(f" Updated jobs collection validator")
|
||||
except Exception as e:
|
||||
print(f" Could not update validator: {e}")
|
||||
raise
|
||||
|
||||
print(f" Applied migration {self.version}: {self.description}")
|
||||
|
||||
async def down(self) -> None:
|
||||
"""Revert to previous validator (without failed statuses)."""
|
||||
|
||||
# Define old schema validator
|
||||
validator = {
|
||||
"$jsonSchema": {
|
||||
"bsonType": "object",
|
||||
"required": ["_id", "title", "status", "client_id", "created_at", "updated_at"],
|
||||
"properties": {
|
||||
"_id": {"bsonType": "string"},
|
||||
"title": {"bsonType": "string"},
|
||||
"status": {
|
||||
"enum": [
|
||||
"created",
|
||||
"ingesting",
|
||||
"ai_processing",
|
||||
"pending_qc",
|
||||
"approved_english",
|
||||
"approved_source",
|
||||
"rejected",
|
||||
"qc_feedback",
|
||||
"translating",
|
||||
"tts_generating",
|
||||
"rendering_video",
|
||||
"pending_final_review",
|
||||
"completed"
|
||||
]
|
||||
},
|
||||
"client_id": {"bsonType": "string"},
|
||||
"created_at": {"bsonType": "date"},
|
||||
"updated_at": {"bsonType": "date"}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Update the collection validator
|
||||
await self.db.command({
|
||||
"collMod": "jobs",
|
||||
"validator": validator,
|
||||
"validationLevel": "moderate",
|
||||
"validationAction": "error"
|
||||
})
|
||||
|
||||
print(f" Rolled back migration {self.version}: {self.description}")
|
||||
print(f" WARNING: Jobs with tts_failed or render_failed status will fail validation!")
|
||||
Loading…
Add table
Reference in a new issue