@memberjunction/actions-bizapps-lms
Version:
LMS system integration actions for MemberJunction
209 lines • 8.43 kB
JavaScript
;
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.EnrollUserAction = void 0;
const global_1 = require("@memberjunction/global");
const learnworlds_base_action_1 = require("../learnworlds-base.action");
const actions_1 = require("@memberjunction/actions");
/**
* Action to enroll a user in a LearnWorlds course
*/
let EnrollUserAction = class EnrollUserAction extends learnworlds_base_action_1.LearnWorldsBaseAction {
/**
* Enroll a user in a course
*/
async InternalRunAction(params) {
const { Params, ContextUser } = params;
this.params = Params;
try {
// Extract and validate parameters
const userId = this.getParamValue(Params, 'UserID');
const courseId = this.getParamValue(Params, 'CourseID');
const price = this.getParamValue(Params, 'Price') || 0;
const justification = this.getParamValue(Params, 'Justification') || 'API Enrollment';
const notifyUser = this.getParamValue(Params, 'NotifyUser') !== false;
const startDate = this.getParamValue(Params, 'StartDate');
const expiryDate = this.getParamValue(Params, 'ExpiryDate');
if (!userId) {
return {
Success: false,
ResultCode: 'VALIDATION_ERROR',
Message: 'UserID is required',
Params
};
}
if (!courseId) {
return {
Success: false,
ResultCode: 'VALIDATION_ERROR',
Message: 'CourseID is required',
Params
};
}
// Prepare enrollment data
const enrollmentData = {
user_id: userId,
justification: justification,
price: price,
notify_user: notifyUser
};
if (startDate) {
enrollmentData.starts_at = new Date(startDate).toISOString();
}
if (expiryDate) {
enrollmentData.expires_at = new Date(expiryDate).toISOString();
}
// Create enrollment
const enrollmentResponse = await this.makeLearnWorldsRequest(`/courses/${courseId}/enrollments`, 'POST', enrollmentData, ContextUser);
if (!enrollmentResponse.success) {
return {
Success: false,
ResultCode: 'API_ERROR',
Message: enrollmentResponse.message || 'Failed to enroll user',
Params
};
}
const enrollment = enrollmentResponse.data;
// Format enrollment details
const enrollmentDetails = {
id: enrollment.id,
userId: enrollment.user_id || userId,
courseId: enrollment.course_id || courseId,
enrolledAt: enrollment.enrolled_at || enrollment.created_at,
startsAt: enrollment.starts_at,
expiresAt: enrollment.expires_at,
status: enrollment.status || 'active',
price: enrollment.price || price,
progress: {
percentage: enrollment.progress_percentage || 0,
completedUnits: enrollment.completed_units || 0,
totalUnits: enrollment.total_units || 0,
lastAccessedAt: enrollment.last_accessed_at
},
certificateEligible: enrollment.certificate_eligible || false,
certificateIssuedAt: enrollment.certificate_issued_at
};
// Get course and user details for summary
let courseTitle = 'Unknown Course';
let userName = 'Unknown User';
// Try to get course details
const courseResponse = await this.makeLearnWorldsRequest(`/courses/${courseId}`, 'GET', null, ContextUser);
if (courseResponse.success && courseResponse.data) {
courseTitle = courseResponse.data.title || courseTitle;
}
// Try to get user details
const userResponse = await this.makeLearnWorldsRequest(`/users/${userId}`, 'GET', null, ContextUser);
if (userResponse.success && userResponse.data) {
const user = userResponse.data;
userName = user.email || user.username || userName;
}
// Create summary
const summary = {
enrollmentId: enrollmentDetails.id,
userId: userId,
userName: userName,
courseId: courseId,
courseTitle: courseTitle,
enrolledAt: enrollmentDetails.enrolledAt,
status: enrollmentDetails.status,
price: enrollmentDetails.price,
notificationSent: notifyUser
};
// Update output parameters
const outputParams = [...Params];
const enrollmentDetailsParam = outputParams.find(p => p.Name === 'EnrollmentDetails');
if (enrollmentDetailsParam) {
enrollmentDetailsParam.Value = enrollmentDetails;
}
const summaryParam = outputParams.find(p => p.Name === 'Summary');
if (summaryParam) {
summaryParam.Value = summary;
}
return {
Success: true,
ResultCode: 'SUCCESS',
Message: `Successfully enrolled user ${userName} in course ${courseTitle}`,
Params: outputParams
};
}
catch (error) {
const errorMessage = error instanceof Error ? error.message : 'Unknown error occurred';
return {
Success: false,
ResultCode: 'EXECUTION_ERROR',
Message: `Error enrolling user: ${errorMessage}`,
Params
};
}
}
/**
* Define the parameters this action expects
*/
get Params() {
const baseParams = this.getCommonLMSParams();
const specificParams = [
{
Name: 'UserID',
Type: 'Input',
Value: null
},
{
Name: 'CourseID',
Type: 'Input',
Value: null
},
{
Name: 'Price',
Type: 'Input',
Value: 0
},
{
Name: 'Justification',
Type: 'Input',
Value: 'API Enrollment'
},
{
Name: 'NotifyUser',
Type: 'Input',
Value: true
},
{
Name: 'StartDate',
Type: 'Input',
Value: null
},
{
Name: 'ExpiryDate',
Type: 'Input',
Value: null
},
{
Name: 'EnrollmentDetails',
Type: 'Output',
Value: null
},
{
Name: 'Summary',
Type: 'Output',
Value: null
}
];
return [...baseParams, ...specificParams];
}
/**
* Metadata about this action
*/
get Description() {
return 'Enrolls a user in a LearnWorlds course with optional pricing and notification settings';
}
};
exports.EnrollUserAction = EnrollUserAction;
exports.EnrollUserAction = EnrollUserAction = __decorate([
(0, global_1.RegisterClass)(actions_1.BaseAction, 'EnrollUserAction')
], EnrollUserAction);
//# sourceMappingURL=enroll-user.action.js.map