-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathimportMembers.js
More file actions
113 lines (97 loc) · 3.52 KB
/
importMembers.js
File metadata and controls
113 lines (97 loc) · 3.52 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
const fs = require('fs');
const csv = require('csv-parser');
const dotenv = require('dotenv');
const mongoose = require('mongoose');
dotenv.config();
require('./db');
const { User, Team } = require('./models/index');
(async () => {
const results = [];
fs.createReadStream('All_csvs/members.csv')
.pipe(csv())
.on('data', (data) => results.push(data))
.on('end', async () => {
try {
for (const row of results) {
const name = row['Name']?.trim();
const email = row['Email']?.trim()?.toLowerCase();
const year = row['Year']?.trim();
const department = row['Department']?.trim();
const phone = row['MobileNo']?.replace(/\D/g, '').trim();
const rollNo = row['RollNo']?.trim();
const teams1 = row['Teams1']
?.split(',')
.map(t => t.trim());
const teams2 = row['Teams2']
?.split(',')
.map(t => t.trim());
const allTeams = [...new Set([...(teams1 || []), ...(teams2 || [])])];
if (!email) {
console.log(`⚠️ Skipping invalid entry (missing email): ${JSON.stringify(row)}`);
continue;
}
// Generate username and password
const username = email.split('@')[0];
const initialPassword = username;
// 🔄 Find user or create new one
let user = await User.findOne({ email });
if (user) {
// ✅ Update existing user
user.username = username;
user.name = name || user.name;
user.rollNo = rollNo || user.rollNo;
user.year = year || user.year;
user.division = department || user.division;
user.phone = phone || user.phone;
user.initialPassword = user.initialPassword || initialPassword;
user.role = 'Member';
user.fcmTokens = [];
console.log(`🔄 Updating existing user: ${email}`);
} else {
// ✅ Create new user
user = new User({
username,
email,
password: initialPassword,
name,
rollNo,
year,
division: department,
phone,
initialPassword,
role: 'Member',
fcmTokens: [],
});
console.log(`🆕 Creating new user: ${email}`);
}
// Save (to ensure user has _id for teams)
await user.save();
// ✅ Assign teams (add if not already)
for (const teamName of allTeams) {
if (!teamName) continue;
let team = await Team.findOne({ name: teamName });
if (!team) {
team = await Team.create({ name: teamName });
console.log(`🆕 Created team: ${teamName}`);
}
// Add user to team if not already a member
if (!team.members.includes(user._id)) {
team.members.push(user._id);
await team.save();
}
// Add team to user's list if not already
if (!user.team.includes(team._id)) {
user.team.push(team._id);
}
}
await user.save();
console.log(`✅ Processed: ${name || 'Unnamed'} | Username: ${username}`);
}
console.log('\n🎉 All users imported/updated successfully!');
} catch (err) {
console.error('❌ Import error:', err);
} finally {
mongoose.connection.close();
}
});
})();