2.4 KiB
2.4 KiB
src/data/AGENTS.md
Purpose
D1 讀取查詢層(content.ts)同後台網站設定欄位定義(settings-fields.ts)。
Ownership
- 擁有
src/data/兩個檔案。 - Drizzle schema 本體喺
src/db/schema.ts(見兄弟db/AGENTS.md),呢度只消費其 select 型別;表單同 AI 嘅輸入型別由src/schemas/(Zodz.infer)提供,兩者唔重覆。
Local Contracts
- 查詢集中:所有前台/Blog 的 D1 查詢寫喺
content.ts,唔好散落喺頁面或元件。 - 只回前台可見:
getItems/getCases/getPublishedPosts只回status = "published",並按sortOrder或publishedAt DESC排序;getPostBySlug同時要求 published。 - 首頁聚合:
getHomeData(db)用Promise.all一次過攞 settings + services/features/steps/faqs + cases,形狀係HomeData。 - 後台總覽聚合:
getDashboardData(db)回DashboardData(posts/cases/content/keywords各狀態計數+recentPosts最新 5 篇+postsWithoutCover),供/admindashboard 用;只讀 DB,AI secrets 由頁面層getEnv()提供。 - 關鍵字佇列:
getKeywords(db)回全部blog_keywords(按createdAt、id排序),供/admin/ai用。 - Slug 去重:
uniqueSlug(db, base, selfId?)撞 slug 就加-2、-3…;selfId用喺更新自己時排除自己。admin 文章同 AI 生成都用。 Db型別:DrizzleD1Database<typeof schema>。- 連結 helper:
whatsappHref/telHref/mailHref/digits/formatDate;電話/WhatsApp 一律經呢啲 helper,唔好散寫。 - 設定欄位:
settings-fields.ts的SETTINGS_GROUPS係/admin/settings表單的唯一來源;新增一個 setting key 之後,要同步加落scripts/seed.sql。追蹤分析欄位(ga4_measurement_id/meta_pixel_id,空字串=關閉)由Base.astro消費,見父層src/AGENTS.md的 Analytics & consent。 - 圖片欄位:
FieldType有"image";hero_image/og_image用呢個型別,/admin/settings會 renderImageField(可上傳去 R2)。 - 顯示用文案繁體中文。
Work Guidance
- 新增可管理欄位:改
settings-fields.ts→ 加 seed default → 喺前端消費(多數喺components/site/*)。
Verification
npm run build。npm run db:seed:local後/admin同前台睇得到種子資料。
Child DOX Index
無。