qus-canvas
Version:
client api for canvas
113 lines (112 loc) • 4.28 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.UsersFactory = void 0;
const endpoints_1 = require("../config/endpoints");
const case_converter_1 = require("../../utils/case.converter");
const canvas_object_not_found_error_1 = require("../../exceptions/canvas-object-not-found.error");
class UsersFactory {
constructor(connector, version, accountId) {
this.connector = connector;
this.version = version;
this.accountId = accountId;
}
/**
* Fetch users from the Canvas API
*
* @param endpoint
* @private
*/
fetchUsers(endpoint) {
return __awaiter(this, void 0, void 0, function* () {
try {
const response = yield this.connector.get(endpoint);
if (response) {
const users = (0, case_converter_1.toCamelCase)(response.data);
const userPromises = users.map((user) => __awaiter(this, void 0, void 0, function* () { return this.mapUser(user); }));
return yield Promise.all(userPromises);
}
}
catch (error) {
console.error(`Error fetching users: ${error}`);
}
return [];
});
}
/**
* Map the user object from the Canvas API to the UserInterface
*
* @param user
* @private
*/
mapUser(user) {
const [firstname, ...lastnameParts] = user.name.split(' ');
const lastname = lastnameParts.join(' ');
return Object.assign(Object.assign({}, user), { id: '', userNumber: user.id, // Map API id to termId
firstname,
lastname });
}
/**
* List users by course ID
*
* @param courseId
* @param page
* @param size
*/
listUsersByCourse(courseId, page, size) {
return __awaiter(this, void 0, void 0, function* () {
const endpoint = new endpoints_1.Endpoints().LIST_USERS_BY_COURSE
.replace(':version', this.version)
.replace(':course_id', courseId)
.replace(':page', page.toString())
.replace(':size', size.toString());
return this.fetchUsers(endpoint);
});
}
/**
* Get a user by their user ID
*
* @param userId
*/
getUser(userId) {
return __awaiter(this, void 0, void 0, function* () {
const endpoint = new endpoints_1.Endpoints().GET_USER
.replace(':version', this.version)
.replace(':user_id', userId);
try {
const response = yield this.connector.get(endpoint);
if (response) {
const user = (0, case_converter_1.toCamelCase)(response.data);
return this.mapUser(user);
}
}
catch (error) {
console.error(`Error fetching user: ${error}`);
}
throw new canvas_object_not_found_error_1.CanvasObjectNotFoundError(userId);
});
}
/**
* Search users by a search term
*
* @param searchterm
*/
searchUsers(searchterm) {
return __awaiter(this, void 0, void 0, function* () {
const endpoint = new endpoints_1.Endpoints().SEARCH_USERS
.replace(':version', this.version)
.replace(':account_id', this.accountId)
.replace(':term', searchterm);
return this.fetchUsers(endpoint);
});
}
}
exports.UsersFactory = UsersFactory;