From 5a260c443f2cebc6c4e5ca76098f2e5eac0866c0 Mon Sep 17 00:00:00 2001 From: mac Date: Tue, 28 Jul 2026 09:55:04 +0800 Subject: [PATCH] feat(delivery): stream task updates with SSE --- frontend/src/api/delivery.ts | 13 +++++ frontend/src/views/service/Catalog.vue | 40 ++++++++++++++- server/internal/handler/delivery.go | 51 ++++++++++++++++++++ server/internal/router/router.go | 1 + server/internal/service/delivery.go | 67 ++++++++++++++++++++++++-- 5 files changed, 168 insertions(+), 4 deletions(-) diff --git a/frontend/src/api/delivery.ts b/frontend/src/api/delivery.ts index 4c3874e..a774ef5 100644 --- a/frontend/src/api/delivery.ts +++ b/frontend/src/api/delivery.ts @@ -72,6 +72,11 @@ export interface TaskEvent { created_at: string } +export interface DeliveryTaskSnapshot { + task: DeliveryTask + events: TaskEvent[] +} + export const deliveryApi = { async listTargets(): Promise { const data = await authRequest('/auth/api/v1/delivery/targets?component=mysql') @@ -112,6 +117,14 @@ export const deliveryApi = { method: 'POST', }) }, + + streamTask(taskId: string): EventSource { + const token = getToken() + const search = new URLSearchParams() + if (token) search.set('access_token', token) + const query = search.toString() + return new EventSource(`/auth/api/v1/delivery/tasks/${encodeURIComponent(taskId)}/stream${query ? `?${query}` : ''}`) + }, } function createIdempotencyKey(payload: CreateMySQLDeliveryPayload) { diff --git a/frontend/src/views/service/Catalog.vue b/frontend/src/views/service/Catalog.vue index 531bc98..27dcdba 100644 --- a/frontend/src/views/service/Catalog.vue +++ b/frontend/src/views/service/Catalog.vue @@ -332,7 +332,7 @@