first commit
This commit is contained in:
133
scripts/clean-test-data.cjs
Executable file
133
scripts/clean-test-data.cjs
Executable file
@@ -0,0 +1,133 @@
|
||||
/**
|
||||
* 清理测试视频数据脚本
|
||||
* 删除所有视频记录、相关文件和数据库记录
|
||||
*/
|
||||
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const sqlite3 = require('sqlite3').verbose();
|
||||
|
||||
// 数据库路径
|
||||
const DB_PATH = path.join(process.cwd(), 'database', 'goguryeo_video.db');
|
||||
|
||||
// 视频文件存储目录
|
||||
const VIDEOS_DIR = path.join(process.cwd(), 'uploads', 'videos');
|
||||
const COVERS_DIR = path.join(process.cwd(), 'uploads', 'covers');
|
||||
const THUMBNAILS_DIR = path.join(process.cwd(), 'uploads', 'thumbnails');
|
||||
|
||||
async function cleanDatabase() {
|
||||
return new Promise((resolve, reject) => {
|
||||
const db = new sqlite3.Database(DB_PATH, (err) => {
|
||||
if (err) {
|
||||
console.error('数据库连接失败:', err);
|
||||
reject(err);
|
||||
return;
|
||||
}
|
||||
console.log('已连接到数据库');
|
||||
});
|
||||
|
||||
// 开始事务
|
||||
db.serialize(() => {
|
||||
db.run('BEGIN TRANSACTION');
|
||||
|
||||
// 删除视频相关的所有数据
|
||||
const queries = [
|
||||
'DELETE FROM play_history',
|
||||
'DELETE FROM user_likes',
|
||||
'DELETE FROM video_stats',
|
||||
'DELETE FROM video_tags',
|
||||
'DELETE FROM videos',
|
||||
'DELETE FROM tags WHERE id > 10', // 保留默认标签
|
||||
// 重置自增ID
|
||||
'DELETE FROM sqlite_sequence WHERE name IN ("videos", "video_tags", "play_history", "user_likes", "video_stats")'
|
||||
];
|
||||
|
||||
let completed = 0;
|
||||
const total = queries.length;
|
||||
|
||||
queries.forEach((query, index) => {
|
||||
db.run(query, (err) => {
|
||||
if (err) {
|
||||
console.error(`执行查询失败 [${index}]:`, err);
|
||||
db.run('ROLLBACK');
|
||||
db.close();
|
||||
reject(err);
|
||||
return;
|
||||
}
|
||||
|
||||
completed++;
|
||||
console.log(`已完成查询 ${completed}/${total}: ${query.split(' ')[0]} ${query.split(' ')[2]}`);
|
||||
|
||||
if (completed === total) {
|
||||
db.run('COMMIT', (err) => {
|
||||
if (err) {
|
||||
console.error('提交事务失败:', err);
|
||||
reject(err);
|
||||
} else {
|
||||
console.log('数据库清理完成');
|
||||
resolve();
|
||||
}
|
||||
db.close();
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
async function cleanFiles() {
|
||||
const directories = [VIDEOS_DIR, COVERS_DIR, THUMBNAILS_DIR];
|
||||
|
||||
for (const dir of directories) {
|
||||
if (fs.existsSync(dir)) {
|
||||
const files = fs.readdirSync(dir);
|
||||
|
||||
for (const file of files) {
|
||||
// 跳过示例文件和隐藏文件
|
||||
if (file.startsWith('.') || file.startsWith('sample')) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const filePath = path.join(dir, file);
|
||||
try {
|
||||
fs.unlinkSync(filePath);
|
||||
console.log(`已删除文件: ${filePath}`);
|
||||
} catch (err) {
|
||||
console.error(`删除文件失败 ${filePath}:`, err);
|
||||
}
|
||||
}
|
||||
|
||||
console.log(`已清理目录: ${dir}`);
|
||||
} else {
|
||||
console.log(`目录不存在: ${dir}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async function main() {
|
||||
try {
|
||||
console.log('开始清理测试数据...');
|
||||
|
||||
// 清理数据库
|
||||
console.log('\n=== 清理数据库 ===');
|
||||
await cleanDatabase();
|
||||
|
||||
// 清理文件
|
||||
console.log('\n=== 清理文件 ===');
|
||||
await cleanFiles();
|
||||
|
||||
console.log('\n✅ 测试数据清理完成!');
|
||||
|
||||
} catch (error) {
|
||||
console.error('❌ 清理过程中出现错误:', error);
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
// 如果直接运行此脚本
|
||||
if (require.main === module) {
|
||||
main();
|
||||
}
|
||||
|
||||
module.exports = { cleanDatabase, cleanFiles };
|
||||
Reference in New Issue
Block a user