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
@@ -0,0 +1,35 @@
function normalizeText(value: string | null | undefined): string {
return value?.trim() ?? "";
}
export function normalizeAccountPlatformUid(value: string | null | undefined): string {
let normalized = normalizeText(value);
while (normalized.toLowerCase().startsWith("platform:")) {
normalized = normalized.slice("platform:".length).trim();
}
return normalized;
}
export function sameAccountPlatformUid(
left: string | null | undefined,
right: string | null | undefined,
): boolean {
const normalizedLeft = normalizeAccountPlatformUid(left);
const normalizedRight = normalizeAccountPlatformUid(right);
return Boolean(normalizedLeft) && normalizedLeft === normalizedRight;
}
export function buildAccountIdentityKey(input: {
platform: string;
platformUid?: string | null;
displayName?: string | null;
}): string {
const platform = normalizeText(input.platform).toLowerCase() || "unknown";
const platformUid = normalizeAccountPlatformUid(input.platformUid);
if (platformUid) {
return `${platform}:${platformUid}`;
}
const normalizedName = normalizeText(input.displayName).replace(/\s+/g, "").toLowerCase();
return `${platform}:name:${normalizedName || "unknown"}`;
}