first commit

This commit is contained in:
2025-09-23 07:35:11 +00:00
commit a5dd3f1335
110 changed files with 46108 additions and 0 deletions

133
scripts/clean-test-data.cjs Executable file
View 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 };