feat: enhance video generation responses with database ID and update dashboard to display pending and completed videos

Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
2026-04-29 16:39:46 +02:00
parent 8e36f48527
commit cc96d26b08
4 changed files with 92 additions and 32 deletions
+2 -1
View File
@@ -91,7 +91,8 @@ class VideoFromImageRequest(BaseModel):
class VideoResponse(BaseModel):
id: str
id: str # This is the job_id from the provider
db_id: str | None = None # This is the UUID from our generated_videos table
model: str
status: str # "queued" | "processing" | "completed" | "failed"
polling_url: str | None = None
+26 -18
View File
@@ -234,18 +234,22 @@ async def generate_video(
polling_url = result.get("polling_url")
job_status = result.get("status", "pending")
now = datetime.now(timezone.utc).replace(tzinfo=None)
db_id = None
async with get_write_lock():
conn = get_conn()
conn.execute(
row = conn.execute(
"""INSERT INTO generated_videos (user_id, job_id, model_id, prompt, polling_url, status, created_at, updated_at)
VALUES (?, ?, ?, ?, ?, ?, ?, ?)""",
VALUES (?, ?, ?, ?, ?, ?, ?, ?) RETURNING id""",
[user_id, job_id, body.model, body.prompt,
polling_url, job_status, now, now],
)
).fetchone()
if row:
db_id = str(row[0])
urls = result.get("unsigned_urls") or result.get("video_urls")
urls = result.get("unsigned_urls") or result.get("video_urls")
return VideoResponse(
id=job_id,
db_id=db_id,
model=body.model,
status=job_status,
polling_url=polling_url,
@@ -287,26 +291,30 @@ async def generate_video_from_image(
polling_url = result.get("polling_url")
job_status = result.get("status", "pending")
now = datetime.now(timezone.utc).replace(tzinfo=None)
db_id = None
async with get_write_lock():
conn = get_conn()
conn.execute(
row = conn.execute(
"""INSERT INTO generated_videos (user_id, job_id, model_id, prompt, polling_url, status, created_at, updated_at)
VALUES (?, ?, ?, ?, ?, ?, ?, ?)""",
VALUES (?, ?, ?, ?, ?, ?, ?, ?) RETURNING id""",
[user_id, job_id, body.model, body.prompt,
polling_url, job_status, now, now],
)
).fetchone()
if row:
db_id = str(row[0])
urls = result.get("unsigned_urls") or result.get("video_urls")
return VideoResponse(
id=job_id,
model=body.model,
status=job_status,
polling_url=polling_url,
video_urls=urls,
video_url=(urls or [None])[0],
error=result.get("error"),
metadata=result.get("metadata"),
)
urls = result.get("unsigned_urls") or result.get("video_urls")
return VideoResponse(
id=job_id,
db_id=db_id,
model=body.model,
status=job_status,
polling_url=polling_url,
video_urls=urls,
video_url=(urls or [None])[0],
error=result.get("error"),
metadata=result.get("metadata"),
)
@router.get("/video/status", response_model=VideoResponse)