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