mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2025-03-14 07:00:01 -04:00
Script to find users with incorrect role based on classrooms
This commit is contained in:
parent
c6392e0f74
commit
7982188e30
1 changed files with 97 additions and 0 deletions
97
scripts/analytics/mongodb/queries/maybeStudentTeacher.js
Normal file
97
scripts/analytics/mongodb/queries/maybeStudentTeacher.js
Normal file
|
@ -0,0 +1,97 @@
|
|||
// Find users that may have incorrect roles based on classroom ownership and membership
|
||||
|
||||
// Usage:
|
||||
// mongo <address>:<port>/<database> <script file> -u <username> -p <password>
|
||||
|
||||
// User buckets
|
||||
// Classroom owner, no role
|
||||
// Classroom owner, student role
|
||||
// Classroom owner, teacher role (GOOD)
|
||||
// Classroom member, no role
|
||||
// Classroom member, teacher role
|
||||
// Classroom member, studnet role (GOOD)
|
||||
|
||||
'use strict';
|
||||
const scriptStartTime = new Date();
|
||||
|
||||
const classrooms = db.classrooms.find({}, {ownerID: 1, members: 1}).toArray();
|
||||
print(classrooms.length, "classrooms");
|
||||
|
||||
const userIds = [];
|
||||
const teacherIds = {};
|
||||
const studentIds = {};
|
||||
for (var classroom of classrooms) {
|
||||
teacherIds[classroom.ownerID.valueOf()] = true;
|
||||
userIds.push(classroom.ownerID);
|
||||
for (var memberId of classroom.members) {
|
||||
studentIds[memberId.valueOf()] = true;
|
||||
userIds.push(memberId);
|
||||
}
|
||||
}
|
||||
|
||||
print(Object.keys(teacherIds).length, "users own classrooms");
|
||||
print(Object.keys(studentIds).length, "users in classrooms");
|
||||
print(Object.keys(teacherIds).length + Object.keys(studentIds).length, "total");
|
||||
|
||||
const users = db.users.find({$and: [{_id: {$in: userIds}}, {anonymous: false}]}, {email:1, role: 1}).toArray();
|
||||
|
||||
const studentOwnsClassroom = [];
|
||||
const teacherInClassroom = [];
|
||||
const individualInClassroom = [];
|
||||
const individualOwnsClassroom = [];
|
||||
for (var user of users) {
|
||||
const userId = user._id.valueOf();
|
||||
if (!user.email) {
|
||||
printjson(user);
|
||||
continue;
|
||||
}
|
||||
if (hasStudentRole(user.role)) {
|
||||
if (teacherIds[userId]) {
|
||||
studentOwnsClassroom.push(user.email);
|
||||
}
|
||||
}
|
||||
else if (hasTeacherRole(user.role)) {
|
||||
if (studentIds[userId]) {
|
||||
teacherInClassroom.push(user.email);
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (studentIds[userId]) {
|
||||
individualInClassroom.push(user.email);
|
||||
}
|
||||
else if (teacherIds[userId]) {
|
||||
individualOwnsClassroom.push(user.email);
|
||||
}
|
||||
else {
|
||||
print("ERROR?", userId);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
print(studentOwnsClassroom.length, "Students own classroom:");
|
||||
for (var email of studentOwnsClassroom) {
|
||||
print(email);
|
||||
}
|
||||
print(teacherInClassroom.length, "Teachers in classroom:");
|
||||
for (var email of teacherInClassroom) {
|
||||
print(email);
|
||||
}
|
||||
print(individualInClassroom.length, "Individuals in classroom:");
|
||||
for (var email of individualInClassroom) {
|
||||
print(email);
|
||||
}
|
||||
print(individualOwnsClassroom.length, "Individuals own classroom:");
|
||||
for (var email of individualOwnsClassroom) {
|
||||
print(email);
|
||||
}
|
||||
|
||||
print("Script runtime: " + (new Date() - scriptStartTime));
|
||||
|
||||
function hasTeacherRole(role) {
|
||||
return ['teacher', 'technology coordinator', 'advisor', 'principal', 'superintendent', 'parent'].indexOf(role) >= 0;
|
||||
}
|
||||
|
||||
function hasStudentRole(role) {
|
||||
return ['student'].indexOf(role) >= 0;
|
||||
}
|
Loading…
Reference in a new issue