69 lines
3.0 KiB
JavaScript
69 lines
3.0 KiB
JavaScript
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(); |