const mongoose = require('mongoose'); const connectDB = require('../config/db'); const User = require('../models/User'); const Asset = require('../models/Asset'); /** * Script migration để chuẩn hóa thông tin người dùng: * 1. Chuyển đổi các Role cũ (Chủ sở hữu, editor, Thành viên) sang enum mới. * 2. Khởi tạo/Cập nhật object storage (used/quota) dựa trên dữ liệu thực tế từ Asset. */ const migrateUsers = async () => { try { console.log('--- Bắt đầu quy trình migration User ---'); await connectDB(); const users = await User.find({}); console.log(`Tìm thấy ${users.length} người dùng cần rà soát.`); for (const user of users) { console.log(`Đang xử lý user: ${user.username} (${user._id})`); // 1. Chuẩn hóa Role // Bản cũ có thể có: 'admin', 'Chủ sở hữu', 'editor', 'moderator', 'Thành viên' let oldRole = user.role; if (oldRole === 'Chủ sở hữu') user.role = 'admin'; else if (oldRole === 'editor' || oldRole === 'Thành viên') user.role = 'user'; const validRoles = ['admin', 'moderator', 'user']; if (!validRoles.includes(user.role)) { user.role = 'user'; } // 1.1. Đảm bảo trường agreedToRules tồn tại và có giá trị if (user.agreedToRules === undefined || user.agreedToRules === null) { user.agreedToRules = true; // Giả định người dùng cũ đã đồng ý } // 2. Tính toán dung lượng đã sử dụng từ Asset thực tế const usage = await Asset.aggregate([ { $match: { uploadedBy: user._id } }, { $group: { _id: null, total: { $sum: "$fileSize" } } } ]); const usedBytes = usage.length > 0 ? usage[0].total : 0; // 3. Cập nhật cấu trúc storage // Nếu user đã có quota riêng thì giữ lại, nếu không dùng mặc định 5GB (5368709120 bytes) const currentQuota = user.storage && user.storage.quota ? user.storage.quota : 5368709120; user.storage = { used: usedBytes, quota: currentQuota }; // Lưu thay đổi (Middleware hash password sẽ không chạy vì password không bị sửa) await user.save(); console.log(` -> Cập nhật: Role [${oldRole} -> ${user.role}] | Storage: ${(usedBytes / (1024*1024)).toFixed(2)} MB / ${(currentQuota / (1024*1024*1024)).toFixed(0)} GB`); } console.log('--- Hoàn tất migration User! ---'); mongoose.connection.close(); process.exit(0); } catch (error) { console.error('Lỗi Migration:', error.message); if (mongoose.connection) mongoose.connection.close(); process.exit(1); } }; migrateUsers();