Introduce a schema-first validation layer and an AI blog generation feature, plus one-command Cloudflare provisioning. - src/schemas/ holds Zod input schemas for post, content, case, settings, AI, and keywords; parseForm() in src/lib/form.ts validates FormData and returns per-field errors. - Migrate all admin POST handlers to parseForm, showing field-level errors and only redirecting once validation passes. - Add blog_keywords table and posts.focus_keyword (migration 0002); uniqueSlug() centralised in src/data/content.ts. - Add src/lib/ai.ts (OpenAI-compatible chat completions + optional Tavily research) and /admin/ai for AI settings, keyword queue, and draft generation. - Add scripts/setup.mjs (npm run setup) to provision D1/KV, set secrets, and optionally migrate, seed, and deploy. - Document AI secrets, Workers Builds deploy flow, and new schemas across README and AGENTS docs.
1.8 KiB
1.8 KiB
migrations/AGENTS.md
Purpose
Cloudflare D1 的 schema migration 同種子資料。
Ownership
- 擁有
migrations/全部 SQL、migrations/meta/同seed.sql。 - Drizzle schema 定義喺
src/db/schema.ts(見src/db/AGENTS.md)。
Local Contracts
- Migration 由工具產生:
0000_*.sql、0001_*.sql、0002_*.sql由npm run db:generate(drizzle-kit)依schema.ts產生;migrations/meta/係產生檔。唔好手改呢啲檔或 meta。0002_*.sql加咗posts.focus_keyword同blog_keywords表。 seed.sql係手寫、獨立於 migration:全部用INSERT OR REPLACE,可重複執行。db:migrate唔會執行 seed。- Migration 唔會喺 CI 執行:Cloudflare Workers Builds 只跑 build + deploy;改 schema 後要手動
npm run db:migrate(雲端)。 - 指令(本機用
:local,雲端省略):npm run db:generate— 由 schema 產生 migrationnpm run db:migrate:local/npm run db:migrate— 套用 migrationnpm run db:seed:local/npm run db:seed— 匯入種子
- Seed 內容:公司資料(
site_settings)、首頁內容(content_items:service/feature/step/faq)、cases、一篇示範posts、三個示範blog_keywords(pending);另有 7 個ai_*AI 設定 keys(獨立 seed block)。 - DB 名稱
yingfung-solar-db,binding 喺wrangler.jsonc(database_id仍係佔位,部署前要填)。
Work Guidance
- 改 schema → 先
db:generate,再db:migrate:local;改 seed → 直接db:seed:local。 - 新增 setting key 時同步更新
src/data/settings-fields.ts。
Verification
npm run db:migrate:local && npm run db:seed:local,再用npm run db:studio或 SQL 查證。npm run build。
Child DOX Index
無。