/** * 清理测试视频数据脚本 * 删除所有视频记录、相关文件和数据库记录 */ 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 };