📄 generation_status.py 1,704 bytes Apr 22, 2026 📋 Raw

"""Generation status update helper for content briefs."""

from datetime import datetime, timezone
from typing import Optional

from .storage import get_db

def _now() -> str:
"""Current UTC timestamp as ISO string."""
return datetime.now(timezone.utc).isoformat()

def update_generation_status(
brief_id: str,
status: str,
content_output: Optional[str] = None,
struggle_score: Optional[float] = None,
generation_job_id: Optional[str] = None,
) -> None:
"""
Update brief status during/after generation.

Args:
    brief_id: The brief UUID
    status: 'generating', 'completed', or 'failed'
    content_output: Generated markdown content (for completed)
    struggle_score: Calculated struggle score (for completed)
    generation_job_id: Job ID tracking
"""
conn = get_db()
try:
    cursor = conn.cursor()

    # Build update fields
    fields = ["status = ?", "updated_at = ?"]
    values = [status, _now()]

    if content_output is not None:
        fields.append("content_output = ?")
        values.append(content_output)

    if struggle_score is not None:
        fields.append("struggle_score = ?")
        values.append(struggle_score)

    if generation_job_id is not None:
        fields.append("generation_job_id = ?")
        values.append(generation_job_id)

    # Add brief_id for WHERE clause
    values.append(brief_id)

    sql = f"UPDATE content_briefs_v2 SET {', '.join(fields)} WHERE id = ?"
    cursor.execute(sql, values)
    conn.commit()

finally:
    conn.close()