thread-master/docs/product/haixun-backend/fe-spec-alignment.md

16 KiB
Raw Permalink Blame History

前端apps/web↔ Spechaixun-backend全量對照

Status: decisions locked部分 · 2026-07-10
目的:在 重切 task 之前 確認「前端已有/在用的能力」是否被後端 spec 完整擁有(可 live 交付),並標出雙向缺口。
輸入:apps/web 現在 UI 實際呼叫以 UI 為主repos.tsspec.md §4§5§9。
範圍原則2026-07-10 使用者):以現在 UI 為準;舊靈感捨棄;死 API remove。

0. 總結(先讀這)

結論 說明
頁面級大致有對 LoginAdminCrewStudioOutboxJobsSettingsScoutBrandsInviteUsage 在 spec §5.3 都有域
方法級不夠完整 Spec §5.2 是域摘要§9 約 184 ID 未逐一對到 前端每個在用 API。有一批 UI 正在用 的方法在 §9 沒有獨立驗收
前端也還沒對齊已批 BYOK UsageEvent key_modeUsageMonthSummary platformbyok 分欄 → 與 spec §4.7 衝突live 前 FE 必須改契約型別
OAuth 前端契約缺 Crew 用 accounts.createMockrepo oauthStartcallback 消費路徑
live 未接線 createRepos('live') 仍回 mockdataSource: 'live' 旗標)
刻意不做P2mock 專用) Insights 真管線、simulate 當 live 完成、公開註冊頁、真金流

因此:以「全部功能完整擁有」標準,目前 spec + 既有 57 tasks 仍不足以保證前端每一條主路徑都有後端+驗收。
應先凍結本對照表 → 補 spec 能力清單§9 → 再重切 task。


1. 畫面/導覽 → 後端域

前端路由/區塊 主要 Repos Spec 域 P0/P1/P2 對齊
/login auth.login Auth P0
/forgot-password /reset-password request/reset password Auth P0
/verify-email send/verify email Auth P0
/app/profile updateProfile Auth P0
/app/users adminUsers.* + usage prefs Admin + Usage P0
/app/crew 帳號 accounts.* Threads Accounts P0 ⚠️ UI 仍 createMock缺 OAuth 契約
/app/crew 人設 personas.* Personas P1
/app/studio 方案Wizard plays.* Plays + Outbox P1 ⚠️ listByPostlistByExternalUrl 未入 §9
/app/studio 單篇 Compose compose.* + research + media Compose + Research + Media P1 ⚠️ mimicanalyzeViral 未入 §9
/app/studio 已發 ownPosts.* generateFromFormula OwnPosts P1 ⚠️ analyzePost 未入 §9formula Remove
/app/studio 提及 mentions.* Mentions P1 ⚠️ generateReply 未獨立驗收
/app/studio 靈感 現 UI 版 onlysession/elements/trends/chat Inspiration P1 範圍鎖定;舊 list/viral/spark Remove
/app/outbox outbox.* Outbox + Worker P1 simulate 僅 mock
/app/jobs jobs.* + notifications Jobs + Notifications P0
/app/settings settings.* + 擴充 ZIP Settings P0 ⚠️ platform_key_availableBYOK 顯示未全
/app/scout /app/brands scout.* topics UI Scout P1 topics RemoveactiveBrand 可 CLIENT
/app/invite invite.* Invite P1
/app/usage plans checkout usage.* Usage P1 ⚠️ 分計分顯未進 FE 型別
/app/today trends + ownPosts 摘要 Inspiration + OwnPosts P1 輕 ⚠️ 聚合頁,依賴子域
/app/insights ownPosts + local accountInsights P2 需求已列 P2不進 Phase C 後端必做
公開註冊/三方頁 Auth API 要、頁不做 決策 故意

2. Repository 方法全量分類

圖例:

  • MUST = UI 有呼叫或 live 主路徑必需 → 後端 必須有等價 API + 驗收
  • API-OK = 後端要有、前端可不開 UIregister三方
  • MOCK = 僅 mock除錯live 不得當完成定義
  • CLIENT = 可前端 state 或本機;後端可選
  • P2 = 本階段不做後端
  • DEPRECATED = 註解已 deprecated可相容可不做新驗收

2.1 Auth8 UI + 缺口)

方法 用途 分類 Spec§9 缺口
login / logout / me 登入會話 MUST AU-0109
updateProfile 個人資料/改密 MUST AP-0407
requestPasswordReset / resetPassword 忘密 MUST AP-0103
sendEmailVerificationCode / verifyEmail 驗證 MUST AR/AP
refreshtoken 換 access MUST AU-0708 FE AuthRepo 無此方法live client 必補
register / 三方 OAuth 完整會員 API API-OK AR / AO 頁可不做

2.2 AdminUsers8

方法 分類 §9 缺口
listUsersPage / getUser / createMember / setSuspended / setEmailVerified / setRoles / resetPassword MUST AD-0114
listUsersdeprecated 全量) CLIENT/compat live 可只做 page

2.3 Accounts4 現有 + OAuth 缺)

方法 分類 §9 缺口
list / refreshSession / remove(disconnect) MUST TH-0510
createMock MOCK TH-09 禁止旁路過關 live oauthStart
oauthStart(及 callback 由瀏覽器導向後端) MUST TH-0104 FE repoCrew UI 皆無

2.4 Plays8

方法 分類 §9 缺口
list / get / save / remove / submit / resolveExternalLink MUST PL-0105,0809
listByPost MUSTPlaysPanel 須補 §5.2 + 驗收 PL-10 類
listByExternalUrl MUSTPlaysPanel 同上 PL-11

2.5 Outbox6

方法 分類 §9 缺口
list / get / retryStep / remove MUST OB-*
simulateSuccess / simulateRootFail MOCK OB-12 live 隱藏或 no-op 失敗

2.6 Jobs / Notifications3+4

方法 分類 §9 缺口
jobs.list/get/startDemo MUST JB-0104,0910 startDemo = template demo
notifications.list/unread/markRead/markAllRead MUST JB-0508

2.7 Settings7

方法 分類 §9 缺口
get/save Ai, get/save Placement, listModels MUST ST-0104,1415 應回 platform_key_availablemember configured
get/set DataSource CLIENT 前端切 mock|live非後端
擴充 ZIP 下載 MUST ST-16 T157

2.8 Personas8

方法 分類 §9 缺口
list/get/getActiveId/setActiveId/save/remove/analyzeFromText/analyzeFromAccount MUST PE-0106

2.9 OwnPosts現 UI

方法 分類 §9 缺口
list / lastSyncedAt / sync / generateReply / sendReply MUST OP-0105,07
analyzePost MUSTOwnPostsPanel 有按鈕) 無獨立 ID 須補 OP-08 + AI 計費
generateFromFormula REMOVE UI 未用後端不做FE repo 日後刪

2.10 Mentions4

方法 分類 §9 缺口
list / markReplied / skip MUST OP-06 偏狀態 list 應明確
generateReply MUSTMentionsPanel 須補 OP-09 + 計費

2.11 Inspiration僅現 UI 版 · 舊流 Remove

決策 2026-07-10舊靈感完全捨棄以 InspirePanel + Today 趨勢為準。

方法 分類 §9 缺口
listTrends / refreshTrends MUSTToday + Inspire IN-0102
listElements / saveElement / removeElement MUST IN-03
getSession / saveSession / clearSession / chat(mode=chat|generate) MUST IN-0405
list / saveIdea / generate / bookmarkTrend / listViral REMOVE 後端不做
sparkAngles / sparkAnglesForTopic / sparkFromTrend REMOVE 後端不做
searchTrends REMOVEUI 未呼叫) 後端不做

2.12 Research / Media1+2

方法 分類 §9 缺口
research.search MUST IN-06 + ST/USG
media.generateImage MUST IN-07
media.attachLocal MUST附圖 IN-0809 真上傳 → 持久 url非法失敗非 data URL 冒充 live

2.13 Compose3

方法 分類 §9 缺口
publishSingle(+schedule) MUST PL-0608
mimic MUSTComposerPanel 須補 + AI 計費ai_copy
analyzeViral MUSTComposerPanel 須補 + AI 計費

2.14 Scout31

方法群 分類 §9 缺口
brands CRUD, products CRUD, importProductFromUrl MUST SC-0102,14
prepareBrief / runScanFromBrief / listPosts MUST SC-0308
draftOutreach / skip / markPublished / sendOutreach MUST SC-0911
removePost / removeTheme MUST SC-12
homework list/save/get/remove MUST SC-13
runScan / getScanContext compat 對齊 runScanFromBrief 可映射
getActiveBrandId / setActiveBrandId CLIENT 前端 localsession 即可
listTopics / saveTopic / removeTopic REMOVE 無 UI 呼叫;後端不做

2.15 Usage10

方法 分類 §9 缺口
getSummary / listEvents MUST USG-0108 FE 型別缺 key_modebyok 分欄
getPlanId / purchasePlan / listMyPurchases MUST USG-11 listMyPurchases 應補 §9
getMemberPrefs / setMemberPrefs MUST USG-1214
getTenantSummary / getTenantAnalytics MUST admin USG-10 analytics 序列分 platform/byok
setPlanId adminself 語意混 與 setMemberPrefs 重疊 契約要寫清

2.16 Invite5

方法 分類 §9 缺口
getMyNetwork / applyInviteCode / getTree / moveMember / listParentCandidates MUST IV-0113

2.17 非 Repo 但重要

能力 分類 說明
Insights 頁 P2 localStorage 報表requirements 已列 P2
Job templatespersona_analyze、threads_sync、scout_scan、outbox_publish MUST spec §5.4worker
數字 uid MUST FE 現 uid: stringlive 可 number→string 顯示但 JSON number
BYOK 分顯 MUST FE Usage UI 需改T155 有提但型別未改

3. Spec 有、前端尚未具備的 live 契約

Spec 前端現況 動作
oauthStart / OAuth 綁帳 createMock 改 AccountsRepo + Crew UI(可 mock 保留 createMock
Auth refresh 無 repo 方法 補 AuthRepo.refresh
Usage key_mode / platform vs byok summary 無欄位 改 usageMeter 型別 + Usage 頁
Settings platform_key_available 僅 member configured 擴 AiSettingsPlacement 顯示
成功 envelope 102000 live 未接 live HTTP client
未實作不回空成功 live 未接 同上
register三方 API 無頁 後端做即可(決策)

4. 前端在用、Spec§9 不足(必須補進「完整擁有」)

下列建議在 重切 task 前 寫入 spec.md §5.2 與 §9新 ID

# 能力 建議驗收 ID 優先
1 plays.listByPost PL-10 P1
2 plays.listByExternalUrl PL-11 P1
3 compose.mimic CP-01或 PL-12+ 計費 P1
4 compose.analyzeViral CP-02 + 計費 P1
5 ownPosts.analyzePost OP-08 + 計費 P1
6 mentions.list + generateReply OP-0910 + 計費 P1
7 usage.listMyPurchases USG-15 P1
8 usage key_modebyok 分欄 FE 型別 + USG P0 契約
9 AuthRepo.refresh 對齊 AU-07 P0 前端 live
10 accounts.oauthStart 對齊 TH-01取代 createMock 主路徑 P0 前端 live
舊靈感topicsgenerateFromFormula REMOVE · 不做

5. 與現有 Tasks 的關係(為何先不重切)

現況 問題
57 tasks 依域粗切 未保證上表 MUST 方法都有 API task + 測試 case
T171「fe live studio」 一行無法覆蓋 PlaysPanel + Compose mimic/viral + OwnPosts analyze + Mentions generate
T155 usage byok display FE 型別尚未定義分欄 → task 輸入不足
T135 accounts live 未強制改掉 createMock → OAuth

建議流程:

1) ~~開放題 16~~ ✅ 已鎖
2) ~~spec / requirements 回寫關鍵決策~~ ✅
3) 重切 tasksUI MUST + 測試 + FE live + apps/backend← 下一步
4) ready-to-implement

6. 已鎖定決策2026-07-10

# 議題 決策
1 舊靈感 API 完全捨棄。後端/驗收只做 現 UItrends、elements、session、chat。listsaveIdeageneratebookmarklistViralspark*searchTrends → Remove
2 generateFromFormula RemoveUI 未用;後端不做)
3 範圍原則 以現在 UI 為主:有按鈕/主路徑呼叫 = MUST僅 mock死碼 = Remove 或 P2
Scout topics Remove(無 page 呼叫,跟 UI 原則)
4 attachLocal / 附圖 真上傳(後端收檔 → 持久可取 URL禁止只靠本機 data URL 當 live 完成)
5 Insights 維持 P2(頁面可 local 算Phase C 後端不做真數據管線)
6 FE uid 可以API JSON number;前端顯示/比對用 toString 即可

靈感:後端 MUST 清單(凍結)

listTrends / refreshTrends
listElements / saveElement / removeElement
getSession / saveSession / clearSession
chat({ message, pinnedIds, mode: chat|generate })

明確 Remove後端不實作、不進 §9

inspiration: list, saveIdea, generate, bookmarkTrend, listViral,
             sparkAngles, sparkAnglesForTopic, sparkFromTrend, searchTrends
ownPosts: generateFromFormula
scout: listTopics, saveTopic, removeTopic
outbox: simulate*live 完成定義)
accounts: createMocklive 主路徑mock 模式可留)

媒體上傳(凍結 · 決策 #4

media.attach / upload對齊 FE attachLocal 語意)
  → 真 multipart或等價上傳
  → 回可跨裝置使用的 url及 id
  → 非法/過大失敗可讀
  → 不可 102000 + 空成功

儲存介面(本機 disk / S3 / 其他)實作可選,但驗收以「真上傳 + 可取 URL」為準。

實作清潔(不擋定義)

  • FE 清掉 Remove 方法的 repo 型別(可併 live 接線 task
  • Member.uid 型別live 適配 number → 顯示 string

7. 統計(粗)

項目
repos.ts 唯一方法名 ~119
UI 有呼叫(抽樣 grep的主路徑 MUST 估計 7590
§9 現有 ID 184含權限失敗工程非 1:1 方法)
明確 MUST 但 §9 缺口 ≥ 8§4 表)+ BYOK FE 契約 + OAuth FE
MOCKP2DEPRECATED 可排除 simulate、createMock、Insights 真管線、spark*、公開註冊頁

8. 批准欄

  • 範圍原則:以現在 UI 為主
  • 舊靈感捨棄generateFromFormulatopics Remove
  • #4 真上傳 · #5 Insights 維持 P2 · #6 uid number + toString 可以
  • requirements #1621、spec §5.2§6§9含 IN-0809已回寫
  • tasks v3 approved「ok同意」ready-to-implement;指定 T### 才寫碼
  • 已回寫 requirements 決策 #1618、spec §5.2§6§9 補 PL-1011、CP-0102、OP-0811
  • 授權補齊其餘 §9 細項後重切 tasks(下一步)