Data flow

Schedule publish (author + worker)

Author picks UTC datetime in the editor. Worker cron runs every 5 minutes to publish overdue scheduled articles. Publish now bypasses the worker.

sequenceDiagram
    participant A as Author
    participant API as FastAPI
    participant DB as MySQL
    participant W as Arq worker
    A->>API: POST /author/articles/{id}/schedule
    API->>DB: status=scheduled
    loop Every 5 min
        W->>DB: scheduled_for <= now
        W->>DB: publish + clear scheduled_for
    end