Sequence end-to-end
Endpoint utama
| Method | Path | Fungsi |
|---|---|---|
POST | /documents/:documentId/generate | Enqueue multi-doc (max 20 types) |
POST | /documents/:documentId/generate/:documentType | Satu dokumen |
GET | /generation-jobs/:jobId | Status job |
POST | /generation-jobs/:jobId/retry | Retry job gagal (rate limit 10/15min) |
GET | /documents/:documentId/generated-files | List file + stale detection |
apps/api/src/generation/generation.routes.ts, generation-worker.service.ts
Status job
Worker membungkusgenerateFromJob() dalam try/catch — kegagalan update status failed + pesan error (tidak stuck active).
Rate limiting
| Endpoint | Limit |
|---|---|
POST .../generate | 20 req / 15 menit |
POST .../retry | 10 req / 15 menit |
Retry behavior
Tombol Retry di frontend memanggilhandleGenerate() dengan documentTypes yang benar per flow (master bukti-1..8, trainer 14 types) — bukan reuse job lama dengan tipe salah.
Renderer
Service terpisah (apps/renderer) — menerima payload + template, mengembalikan DOCX/PPTX.
Sidebar UI states
| Komponen | Kondisi |
|---|---|
SidebarSedangGenerate | Job queued / active |
SidebarGenerateGagal | Job failed + tombol retry |
SidebarSiapDiunduh | File ready — detect trainer vs master labels |