Add optional post-level and localized title fields, and use a new postTitleText helper for Resource.title so card/list surfaces prefer short backend-provided titles instead of full body text. When title is missing, fallback to the first non-empty body line, then filename, then post id. Document the backend handoff in docs/posts-title-api.md alongside the other backend task docs.
1.8 KiB
1.8 KiB
Posts title fields for list/card surfaces
Front-end list/card surfaces such as 热门资料, 官方推荐, and 全部资料 should display a short title, not the full Telegram/body text.
Affected endpoints
Any endpoint returning Post items should include a short title when available:
GET /api/postsGET /api/posts/searchGET /api/posts/recommendedGET /api/posts/:id
Recommended response shape
{
"id": "string",
"title": "ARK 2026 共识加速计划", // optional global fallback title
"text": "完整正文 / Telegram-style body text...",
"localizations": {
"zh": {
"title": "ARK 2026 共识加速计划",
"text": "完整中文正文...",
},
"en": {
"title": "ARK 2026 Consensus Acceleration Plan",
"text": "Full English body...",
},
},
}
Front-end fallback order
For Resource.title, front-end reads:
localizations[currentLang].titlepost.title- first non-empty line of localized/full
text - first attachment filename
post.id
So backend can roll this out gradually: old posts without title still render, but long body text will be reduced to its first line.
Requirement
Do not put an entire body paragraph into title. title should be concise enough for a two-line card/list title.
Examples:
| Good title | Bad title |
|---|---|
ARK 2026「共识加速计划」邀请王霸榜 |
Full event body with links, schedule, rules, and hashtags |
ARK 主网核心合约地址(BSC链) |
Full contract explainer paragraph |
ARK灵魂五问完整视频 |
Full video caption text |