feat(desktop): drop parked review flow, add publish management

SaaS 侧人工审核后才创建 publish job,desktop 不再做二次审核:移除
manual/waiting_user/parked/from_parked 状态机与 LeaseFromParked 查询,
desktop client 只执行发布并新增"发布管理"页(待发布队列 / 历史 / 再次
发送)。同时抽离 @geo/publisher-platforms 共享适配器包、新增 Redis-based
desktop_presence 与 publish_record_support,刷新 admin-web 发布弹窗与
媒体库;plan A / spec 文档同步口径。
This commit is contained in:
2026-04-20 09:52:48 +08:00
parent b16e9f0bd1
commit a617d39a4a
93 changed files with 5519 additions and 3594 deletions
@@ -31,8 +31,7 @@ INSERT INTO desktop_tasks (
kind,
payload,
status,
dedup_key,
parked_reason
dedup_key
)
VALUES (
sqlc.arg(desktop_id),
@@ -45,8 +44,7 @@ VALUES (
sqlc.arg(kind),
sqlc.arg(payload),
sqlc.arg(status),
sqlc.narg(dedup_key),
sqlc.narg(parked_reason)
sqlc.narg(dedup_key)
)
RETURNING *;
@@ -77,7 +75,6 @@ SET active_attempt_id = sqlc.arg(attempt_id),
lease_expires_at = now() + interval '10 minutes',
status = 'in_progress',
attempts = t.attempts + 1,
parked_reason = NULL,
updated_at = now()
FROM candidate
WHERE t.desktop_id = candidate.desktop_id
@@ -90,28 +87,12 @@ SET active_attempt_id = sqlc.arg(attempt_id),
lease_expires_at = now() + interval '10 minutes',
status = 'in_progress',
attempts = attempts + 1,
parked_reason = NULL,
updated_at = now()
WHERE desktop_id = sqlc.arg(desktop_id)
AND target_client_id = sqlc.arg(client_id)
AND status = 'queued'
RETURNING *;
-- name: LeaseParkedDesktopTask :one
UPDATE desktop_tasks
SET active_attempt_id = sqlc.arg(attempt_id),
lease_token_hash = sqlc.arg(lease_token_hash),
lease_expires_at = now() + interval '10 minutes',
status = 'in_progress',
attempts = attempts + 1,
parked_reason = NULL,
updated_at = now()
WHERE desktop_id = sqlc.arg(desktop_id)
AND target_client_id = sqlc.arg(client_id)
AND status = 'waiting_user'
AND active_attempt_id IS NULL
RETURNING *;
-- name: ExtendDesktopTaskLease :one
UPDATE desktop_tasks
SET lease_expires_at = now() + interval '10 minutes',
@@ -121,19 +102,6 @@ WHERE desktop_id = sqlc.arg(desktop_id)
AND status = 'in_progress'
RETURNING *;
-- name: ParkDesktopTask :one
UPDATE desktop_tasks
SET status = 'waiting_user',
active_attempt_id = NULL,
lease_token_hash = NULL,
lease_expires_at = NULL,
parked_reason = sqlc.arg(parked_reason),
updated_at = now()
WHERE desktop_id = sqlc.arg(desktop_id)
AND lease_token_hash = sqlc.arg(lease_token_hash)
AND status = 'in_progress'
RETURNING *;
-- name: CompleteDesktopTask :one
UPDATE desktop_tasks
SET status = sqlc.arg(status),
@@ -142,7 +110,6 @@ SET status = sqlc.arg(status),
active_attempt_id = NULL,
lease_token_hash = NULL,
lease_expires_at = NULL,
parked_reason = NULL,
updated_at = now()
WHERE desktop_id = sqlc.arg(desktop_id)
AND lease_token_hash = sqlc.arg(lease_token_hash)
@@ -156,7 +123,6 @@ SET status = 'aborted',
active_attempt_id = NULL,
lease_token_hash = NULL,
lease_expires_at = NULL,
parked_reason = NULL,
updated_at = now()
WHERE desktop_id = sqlc.arg(desktop_id)
AND lease_token_hash = sqlc.arg(lease_token_hash)
@@ -170,11 +136,10 @@ SET status = 'aborted',
active_attempt_id = NULL,
lease_token_hash = NULL,
lease_expires_at = NULL,
parked_reason = NULL,
updated_at = now()
WHERE desktop_id = sqlc.arg(desktop_id)
AND target_client_id = sqlc.arg(client_id)
AND status IN ('queued', 'waiting_user')
AND status = 'queued'
RETURNING *;
-- name: TenantCancelDesktopTask :one
@@ -184,11 +149,10 @@ SET status = 'aborted',
active_attempt_id = NULL,
lease_token_hash = NULL,
lease_expires_at = NULL,
parked_reason = NULL,
updated_at = now()
WHERE desktop_id = sqlc.arg(desktop_id)
AND workspace_id = sqlc.arg(workspace_id)
AND status IN ('queued', 'waiting_user')
AND status = 'queued'
RETURNING *;
-- name: ReconcileDesktopTask :one
@@ -205,7 +169,6 @@ SET status = CASE
active_attempt_id = NULL,
lease_token_hash = NULL,
lease_expires_at = NULL,
parked_reason = NULL,
attempts = attempts + CASE WHEN sqlc.arg(status)::text = 'retry' THEN 1 ELSE 0 END,
updated_at = now()
WHERE desktop_id = sqlc.arg(desktop_id)
@@ -220,11 +183,10 @@ SET status = 'unknown',
active_attempt_id = NULL,
lease_token_hash = NULL,
lease_expires_at = NULL,
parked_reason = NULL,
updated_at = now()
WHERE target_client_id = sqlc.arg(client_id)
AND workspace_id = sqlc.arg(workspace_id)
AND status IN ('waiting_user', 'in_progress');
AND status = 'in_progress';
-- name: CreateDesktopTaskAttempt :one
INSERT INTO desktop_task_attempts (