const mongoose = require('mongoose'); const fs = require('fs'); const path = require('path'); const connectDB = require('../config/db'); const Asset = require('../models/Asset'); /** * Script cập nhật bổ sung trường fileSize cho các Asset cũ * Giúp tối ưu hóa việc kiểm tra Quota và thống kê dung lượng */ const fixAssetFileSize = async () => { try { console.log('=== BẮT ĐẦU CẬP NHẬT KÍCH THƯỚC FILE CHO ASSET ==='); await connectDB(); // 1. Tìm các Asset chưa có trường fileSize hoặc fileSize bằng null/0 const assetsToFix = await Asset.find({ $or: [ { fileSize: { $exists: false } }, { fileSize: null }, { fileSize: 0 } ] }); console.log(`- Tìm thấy ${assetsToFix.length} bản ghi cần cập nhật.`); let successCount = 0; let errorCount = 0; let missingFileCount = 0; for (const asset of assetsToFix) { if (asset.filePath && fs.existsSync(asset.filePath)) { try { const stats = fs.statSync(asset.filePath); asset.fileSize = stats.size; await asset.save(); successCount++; if (successCount % 10 === 0) { console.log(` [Progress] Đã cập nhật ${successCount} file...`); } } catch (err) { console.error(` [Lỗi] Không thể đọc stats cho Asset ${asset._id}: ${err.message}`); errorCount++; } } else { console.warn(` [Cảnh báo] Không tìm thấy file vật lý cho Asset ${asset._id}: ${asset.filePath}`); missingFileCount++; } } console.log('\n=== TỔNG KẾT QUÁ TRÌNH ==='); console.log(`- Thành công: ${successCount}`); console.log(`- Lỗi đọc file: ${errorCount}`); console.log(`- File không tồn tại trên đĩa: ${missingFileCount}`); console.log('=========================================='); mongoose.connection.close(); process.exit(0); } catch (error) { console.error('Lỗi nghiêm trọng:', error.message); process.exit(1); } }; fixAssetFileSize();