Data flow
Author write → publish
ArticleEditor autosaves every 30s via PATCH /author/articles/{id}. Publish sets status=published, published_at, clears scheduled_for.
sequenceDiagram
participant A as Author
participant ED as ArticleEditor
participant API as FastAPI
participant DB as MySQL
A->>ED: Edit blocks
ED->>API: PATCH /author/articles/{id}
API->>DB: Update article
A->>ED: Publish now
ED->>API: POST /author/articles/{id}/publish
API->>DB: status=published
API-->>ED: slug
Public read: GET /api/v1/articles/{slug} increments view count and applies paywall truncation server-side.