Skip to content

Commit

Permalink
start requirements / actions
Browse files Browse the repository at this point in the history
  • Loading branch information
ngoerlitz committed Aug 10, 2023
1 parent ae57ee4 commit 2425b43
Show file tree
Hide file tree
Showing 3 changed files with 79 additions and 1 deletion.
2 changes: 2 additions & 0 deletions src/Router.ts
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,8 @@ router.use(
r.get("/info", CourseInformationController.getInformationByUUID);
r.get("/info/my", CourseInformationController.getUserCourseInformationByUUID);
r.get("/info/training", CourseInformationController.getCourseTrainingInformationByUUID);
r.get("/info/requirements", CourseInformationController.getCourseRequirements);
r.get("/info/requirements/validate", CourseInformationController.validateCourseRequirements);
})
);

Expand Down
2 changes: 1 addition & 1 deletion src/controllers/course/CourseAdminController.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import { ValidatorType } from "../_validators/ValidatorType";
* Gets all courses
*/
async function getAll(request: Request, response: Response) {
const courses = await Course.findAll();
const courses: Course[] = await Course.findAll();

response.send(courses);
}
Expand Down
76 changes: 76 additions & 0 deletions src/controllers/course/CourseInformationController.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { Request, Response } from "express";
import { Course } from "../../models/Course";
import { User } from "../../models/User";
import { TrainingSession } from "../../models/TrainingSession";
import { ActionRequirement } from "../../models/ActionRequirement";

/**
* Returns course information based on the provided uuid (request.query.uuid)
Expand Down Expand Up @@ -133,8 +134,83 @@ async function getCourseTrainingInformationByUUID(request: Request, response: Re
response.send(data?.training_sessions ?? []);
}

/**
* Returns the requested course's requirements as an array of strings
* @param request
* @param response
*/
async function getCourseRequirements(request: Request, response: Response) {
const query = request.query as {course_uuid: string};
const requirements = await _getRequirementsFromCourse(query.course_uuid);
if (requirements == null) {
response.status(404).send();
return;
}

response.send(requirements);
}

async function validateCourseRequirements(request: Request, response: Response) {
const query = request.query as {course_uuid: string};
const requirements = await _getRequirementsFromCourse(query.course_uuid);
if (requirements == null) {
response.status(404).send();
return;
}

let req_ids_satisfied = new Map<number, boolean>;
for (const req of requirements) {
// do logic...

// if yes:
if (!req_ids_satisfied.has(req.req_id) || req_ids_satisfied.get(req.req_id)) {
req_ids_satisfied.set(req.req_id, true);
}

// if no:
//req_ids_satisfied.set(req.req_id, false);
}

let ids: number[] = [];
req_ids_satisfied.forEach((value, key) => {
if (value) {
ids.push(key);
}
});

response.send(ids);
}

async function _getRequirementsFromCourse(courseUUID: string) {
const course = await Course.findOne({
where: {
uuid: courseUUID
},
include: [{
association: Course.associations.action_requirements
}]
});

if (course == null) {
return null;
}

const actionRequirements = course.action_requirements?.filter((actionRequirement: ActionRequirement) => actionRequirement.type == "requirement");
let actions: { action: string, req_id: number }[] = [];

actionRequirements?.forEach((actionRequirement: ActionRequirement) => {
actionRequirement.action.forEach((s) => {
actions.push({action: s, req_id: actionRequirement.id});
})
});

return actions;
}

export default {
getInformationByUUID,
getUserCourseInformationByUUID,
getCourseTrainingInformationByUUID,
getCourseRequirements,
validateCourseRequirements
};

0 comments on commit 2425b43

Please sign in to comment.