-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgetRubric.js
78 lines (62 loc) · 2.97 KB
/
getRubric.js
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
const canvasAPI = require('node-canvas-api')
async function getRubric (courseId, assignmentId, rubricId) {
const [enrollments, submissions, rubrics, sections] = await Promise.all([
canvasAPI.getEnrollmentsInCourse(courseId),
canvasAPI.getAssignmentSubmissions(courseId, assignmentId, canvasAPI.getOptions.submissions.submission_comments, canvasAPI.getOptions.submissions.rubric_assessment),
canvasAPI.getRubric(courseId, rubricId),
canvasAPI.getSections(courseId)
])
// const students = enrollments.filter(enrollment => enrollment.type === 'StudentEnrollment') // excludes StudentViewEnrollment but keeps StudentEnrollment, to keep studentView use enrollment.role
const students = enrollments.filter(enrollment => enrollment.role === 'StudentEnrollment') // use for testing
const nonStudents = enrollments.filter(enrollment => enrollment.role !== 'StudentEnrollment') // excludes both StudentViewEnrollment and StudentEnrollment
const studentData = students.map(student => {
const user = student.user || ''
const enrollmentType = student.type || ''
const userName = user.name || ''
const userSISID = user.sis_user_id || ''
const userCanvasID = user.id || ''
const section = sections.find(student => student.course_section_id === sections.id ) || {}
const sectionName = section.name || ''
const submission = submissions.find(submission => submission.user_id === user.id) || {}
const submissionId = submission.id || ''
const submissionState = submission.workflow_state || ''
const graderId = submission.grader_id || ''
const grader = nonStudents.find(nonStudent => nonStudent.user_id === graderId) || {}
const graderName = (grader.user && grader.user.name) || ''
const graderRole = grader.role || ''
const submissionScore = submission.score !== null ? submission.score : '';
const overallComments = submission.submission_comments
? submission.submission_comments
.filter(comment => comment.author.id !== userCanvasID)
.map(comment => comment.comment)
: []
const rubricAssessments = rubrics.assessments.find(rubric => rubric.artifact_id === submissionId) || {}
const rubricScore = rubricAssessments.score !== null ? rubricAssessments.score : '';
const rubricData = (rubricAssessments.data || []).map(({ points, comments }) => ({ points, comments }))
const rubricGrader = nonStudents.find(nonStudent => nonStudent.user_id === rubricAssessments.assessor_id) || {}
const rubricGraderName = (rubricGrader.user && rubricGrader.user.name) || ''
const rubricGraderRole = rubricGrader.role || ''
return {
userName,
userSISID,
userCanvasID,
enrollmentType,
sectionName,
submissionState,
submissionScore,
graderId,
graderName,
graderRole,
rubricScore,
rubricGraderName,
rubricGraderRole,
rubricData,
overallComments
}
})
return {
studentData,
rubrics
}
}
module.exports = getRubric