feat: 添加评论文章链接字段并优化自动迁移脚本

- 在 Comment 表中添加 post_url 字段,用于存储文章完整 URL
- 更新前后端 API 以返回 post_url 字段
- 管理后台评论列表显示文章链接(优先显示 post_url)
- 移除前端调试日志并优化自动迁移脚本输出信息
- 通过脚本入口文件统一管理迁移任务
This commit is contained in:
anghunk
2026-02-09 13:18:58 +08:00
parent d90a686ff7
commit b2fd3e72e6
7 changed files with 10 additions and 17 deletions

View File

@@ -2,7 +2,7 @@
"name": "cwd-api",
"version": "0.0.18",
"scripts": {
"deploy": "node scripts/auto_migrate.js && wrangler deploy",
"deploy": "node scripts/index.js && wrangler deploy",
"dev": "wrangler dev",
"start": "wrangler dev",
"test": "vitest",

View File

@@ -39,17 +39,11 @@ function findDatabaseName() {
function run() {
try {
console.log('🔍 [Auto-Migrate] Detecting D1 database...');
const dbName = findDatabaseName();
if (!dbName) {
console.warn('⚠️ [Auto-Migrate] Could not detect database_name from wrangler config. Skipping.');
return;
}
console.log(`✅ [Auto-Migrate] Found database: ${dbName}`);
console.log('🔍 [Auto-Migrate] Checking schema status...');
try {
// Check if post_url column exists
const checkCmd = `npx wrangler d1 execute ${dbName} --command "SELECT count(*) as count FROM pragma_table_info('Comment') WHERE name='post_url'" --remote --json`;
const output = execSync(checkCmd, { encoding: 'utf-8', stdio: ['ignore', 'pipe', 'ignore'] });
@@ -57,16 +51,12 @@ function run() {
const count = result[0]?.results?.[0]?.count;
if (count > 0) {
console.log('✅ [Auto-Migrate] Schema is up to date.');
return;
}
} catch (e) {
console.warn('⚠️ [Auto-Migrate] Check failed (Database might be new or network error). Skipping migration to be safe.');
console.warn(e.message);
return;
}
console.log('🚀 [Auto-Migrate] Applying migration...');
const sql = `
ALTER TABLE Comment ADD COLUMN post_url TEXT;
UPDATE Comment SET post_url = post_slug;
@@ -82,10 +72,10 @@ function run() {
const migrateCmd = `npx wrangler d1 execute ${dbName} --command "${flatSql}" --remote --yes`;
execSync(migrateCmd, { stdio: 'inherit' });
console.log('[Auto-Migrate] Completed successfully.');
console.log('[Auto-Migrate] Migration applied for Comment.post_url.');
} catch (error) {
console.error('[Auto-Migrate] Failed:', error.message);
console.error('[Auto-Migrate] Failed:', error.message);
process.exit(1);
}
}

1
cwd-api/scripts/index.js Normal file
View File

@@ -0,0 +1 @@
require('./auto_migrate');

View File

@@ -54,6 +54,7 @@ export const listComments = async (c: Context<{ Bindings: Bindings }>) => {
name: row.name,
email: row.email,
postSlug: row.post_slug,
postUrl: row.post_url,
url: row.url,
ipAddress: row.ip_address,
contentText: row.content_text,

View File

@@ -36,7 +36,7 @@ export const getComments = async (c: Context<{ Bindings: Bindings }>) => {
let query = `
SELECT id, name, email, url, content_text as contentText,
content_html as contentHtml, created, parent_id as parentId,
post_slug as postSlug, priority, COALESCE(likes, 0) as likes
post_slug as postSlug, post_url as postUrl, priority, COALESCE(likes, 0) as likes
FROM Comment
WHERE status = "approved" AND post_slug = ?
ORDER BY priority DESC, created DESC
@@ -46,7 +46,7 @@ export const getComments = async (c: Context<{ Bindings: Bindings }>) => {
query = `
SELECT id, name, email, url, content_text as contentText,
content_html as contentHtml, created, parent_id as parentId,
post_slug as postSlug, priority, COALESCE(likes, 0) as likes
post_slug as postSlug, post_url as postUrl, priority, COALESCE(likes, 0) as likes
FROM Comment
WHERE status = "approved" AND post_slug IN (${placeholders})
ORDER BY priority DESC, created DESC