feat: 添加评论文章链接字段并优化自动迁移脚本
- 在 Comment 表中添加 post_url 字段,用于存储文章完整 URL - 更新前后端 API 以返回 post_url 字段 - 管理后台评论列表显示文章链接(优先显示 post_url) - 移除前端调试日志并优化自动迁移脚本输出信息 - 通过脚本入口文件统一管理迁移任务
This commit is contained in:
@@ -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",
|
||||
|
||||
@@ -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
1
cwd-api/scripts/index.js
Normal file
@@ -0,0 +1 @@
|
||||
require('./auto_migrate');
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user