Cài đặt quota cho các thành viên

This commit is contained in:
2026-06-09 12:29:38 +07:00
parent 9f9c38e6e7
commit 0eaaf074ba
6 changed files with 346 additions and 16 deletions
+66
View File
@@ -0,0 +1,66 @@
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();
+3 -3
View File
@@ -50,10 +50,10 @@ const getStorageStats = async () => {
for (const asset of assets) {
const userId = asset.uploadedBy ? asset.uploadedBy.toString() : 'unknown';
if (asset.filePath && fs.existsSync(asset.filePath)) {
const fileStat = fs.statSync(asset.filePath);
if (asset.fileSize || (asset.filePath && fs.existsSync(asset.filePath))) {
const size = asset.fileSize || fs.statSync(asset.filePath).size;
if (stats[userId]) {
stats[userId].totalBytes += fileStat.size;
stats[userId].totalBytes += size;
stats[userId].fileCount += 1;
} else {
stats['unknown'].totalBytes += fileStat.size;