@byu-oit/canvas-sdk
Version:
A wrapper around Instructure's Canvas API
87 lines (79 loc) • 3.05 kB
JavaScript
;
const logger = require('./utils/logger');
const uuid = require('uuid');
const DATE_FORMAT_STRING = 'YYYY-MM-DDTHH:MM:SSZ';
module.exports = function(canvas) {
const terms = {};
terms.exists = async function(sisTermId) {
const terms = await canvas.request('GET', `accounts/1/terms?page=1&per_page=100`);
if(terms) {
for(const term of terms.enrollment_terms) {
if(term.sis_term_id === sisTermId) {
logger.info(`Term ${sisTermId} already exists in Canvas.`);
return true;
}
}
return false;
}
};
terms.add = async function(termName, termStartDate, termEndDate, termId, termGradesDueDate) {
const options = {
'enrollment_term': {
'name': termName,
'start_at': termStartDate.toString(DATE_FORMAT_STRING),
'end_at': termEndDate.toString(DATE_FORMAT_STRING),
'sis_term_id': termId,
'overrides': {
'TeacherEnrollment': {
"start_at": null,
"end_at": termGradesDueDate.toString(DATE_FORMAT_STRING)
},
'TaEnrollment': {
"start_at": null,
"end_at": termGradesDueDate.toString(DATE_FORMAT_STRING)
}
}
}
};
logger.debug(`Request options for add term: ${JSON.stringify(options)}`);
const res = await canvas.request('POST', 'accounts/1/terms', options);
if(res) {
logger.info(`Term with id ${termId} was created successfully`);
return res;
} else {
logger.error(`Term with id ${termId} failed to be added!`);
}
};
terms.delete = async function(sisTermId) {
const newId = uuid();
const options = {
enrollment_term: {
sis_term_id: newId
}
};
let res;
res = await canvas.request('PUT', `accounts/1/terms/sis_term_id:${sisTermId}`, options);
if(!res) {
logger.error(`Failed to scramble sisTermId prior to deleting term with sisTermId = ${sisTermId}`);
} else {
res = await canvas.request('DELETE', `accounts/1/terms/sis_term_id:${newId}`);
if(res) {
logger.info(`Successfully deleted term with sisTermId = ${sisTermId}`);
} else {
logger.error(`Failed to delete term with sisTermId = ${sisTermId}`);
}
}
};
terms.get = async function(sisTermId) {
const terms = await canvas.terms.getAll();
for(let term of terms) {
if(term.sis_term_id === sisTermId) {
return term;
}
}
};
terms.getAll = async function() {
return await canvas.requestAll('accounts/1/terms?include[]=overrides', 'enrollment_terms');
};
return terms;
};