fix(backend): Foute entity-structuur van leerpaden verbeterd.
Ook testen geschreven voor LearningPathRepository en LearningObjectRepository.
This commit is contained in:
parent
4d999c78ba
commit
1417907933
24 changed files with 474 additions and 64 deletions
7
backend/tests/test-assets/learning-objects/learning-object-example.d.ts
vendored
Normal file
7
backend/tests/test-assets/learning-objects/learning-object-example.d.ts
vendored
Normal file
|
@ -0,0 +1,7 @@
|
|||
import {LearningObject} from "../../../src/entities/content/learning-object.entity";
|
||||
import {Attachment} from "../../../src/entities/content/attachment.entity";
|
||||
|
||||
type LearningObjectExample = {
|
||||
createLearningObject: () => LearningObject,
|
||||
createAttachment: {[key: string]: (owner: LearningObject) => Attachment}
|
||||
};
|
Binary file not shown.
After Width: | Height: | Size: 7.6 KiB |
|
@ -0,0 +1,25 @@
|
|||
# Werken met notebooks
|
||||
|
||||
Het lesmateriaal van 'Python in wiskunde en STEM' wordt aangeboden in de vorm van interactieve **_notebooks_**. Notebooks zijn _digitale documenten_ die zowel uitvoerbare code bevatten als tekst, afbeeldingen, video, hyperlinks ...
|
||||
|
||||
_Nieuwe begrippen_ worden aangebracht via tekstuele uitleg, video en afbeeldingen.
|
||||
|
||||
Er zijn uitgewerkte *voorbeelden* met daarnaast ook kleine en grote *opdrachten*. In deze opdrachten zal je aangereikte code kunnen uitvoeren, maar ook zelf code opstellen.
|
||||
|
||||
De code die in de notebooks gebruikt wordt, is Python versie 3. We kozen voor Python omdat dit een heel toegankelijke programmeertaal is, die vaak ook intuïtief is.
|
||||
Python is bovendien bezig aan een opmars en wordt gebruikt door bedrijven, zoals Google, NASA, Netflix, Uber, AstraZeneca, Barco, Instagram en YouTube.
|
||||
|
||||
We kozen voor notebooks omdat daar enkele belangrijke voordelen aan verbonden zijn: leerkrachten moeten geen geavanceerde installaties doen om de notebooks te gebruiken, leerkrachten kunnen verschillende soorten van lesinhouden aanbieden via één platform, de notebooks zijn interactief, leerlingen bouwen de oplossing van een probleem stap voor stap op in de notebook waardoor dat proces zichtbaar is voor de leerkracht ([Jeroen Van der Hooft, 2023](https://libstore.ugent.be/fulltxt/RUG01/003/151/437/RUG01-003151437_2023_0001_AC.pdf)).
|
||||
|
||||
---
|
||||
Klik je op onderstaande knop 'Open notebooks', dan word je doorgestuurd naar een andere website waar jouw persoonlijke notebooks ingeladen worden. (Dit kan even duren.)
|
||||
|
||||
Links op het scherm vind je er twee bestanden met extensie _.ipynb_.
|
||||
Dit zijn de twee notebooks waarin je resp. een overzicht krijgt van de opbouw en mogelijkheden en hoe je er mee aan de slag kan. Dubbelklik op de bestandsnaam om een notebook te openen.
|
||||
|
||||
Je ziet er ook een map *images* met de afbeeldingen die in de notebooks getoond worden.
|
||||
|
||||
In deze eerste twee notebooks leer je hoe de notebooks zijn opgevat en hoe je ermee aan de slag kan.
|
||||
Na het doorlopen van beide notebooks heb je een goed idee van hoe onze Python notebooks zijn opgevat.
|
||||
|
||||
[](https://kiks.ilabt.imec.be/hub/tmplogin?id=0101 "Notebooks Werking")
|
Binary file not shown.
After Width: | Height: | Size: 31 KiB |
|
@ -0,0 +1,74 @@
|
|||
import {LearningObjectExample} from "../learning-object-example";
|
||||
import {Language} from "../../../../src/entities/content/language";
|
||||
import {DwengoContentType} from "../../../../src/services/learning-objects/processing/content-type";
|
||||
import {loadTestAsset} from "../../../test-utils/load-test-asset";
|
||||
import {EducationalGoal, LearningObject, ReturnValue} from "../../../../src/entities/content/learning-object.entity";
|
||||
import {Attachment} from "../../../../src/entities/content/attachment.entity";
|
||||
import {EnvVars, getEnvVar} from "../../../../src/util/envvars";
|
||||
|
||||
const ASSETS_PREFIX = "learning-objects/pn_werkingnotebooks/";
|
||||
|
||||
const example: LearningObjectExample = {
|
||||
createLearningObject: ()=> {
|
||||
let learningObject = new LearningObject();
|
||||
learningObject.hruid = `${getEnvVar(EnvVars.UserContentPrefix)}pn_werkingnotebooks`;
|
||||
learningObject.version = 3;
|
||||
learningObject.language = Language.Dutch;
|
||||
learningObject.title = "Werken met notebooks";
|
||||
learningObject.description = "Leren werken met notebooks";
|
||||
learningObject.keywords = ["Python", "KIKS", "Wiskunde", "STEM", "AI"]
|
||||
|
||||
let educationalGoal1 = new EducationalGoal();
|
||||
educationalGoal1.source = "Source";
|
||||
educationalGoal1.id = "id";
|
||||
|
||||
let educationalGoal2 = new EducationalGoal();
|
||||
educationalGoal2.source = "Source2";
|
||||
educationalGoal2.id = "id2";
|
||||
|
||||
learningObject.educationalGoals = [educationalGoal1, educationalGoal2];
|
||||
learningObject.admins = [];
|
||||
learningObject.contentType = DwengoContentType.TEXT_MARKDOWN;
|
||||
learningObject.teacherExclusive = false;
|
||||
learningObject.skosConcepts = [
|
||||
'http://ilearn.ilabt.imec.be/vocab/curr1/s-vaktaal',
|
||||
'http://ilearn.ilabt.imec.be/vocab/curr1/s-digitale-media-en-toepassingen',
|
||||
'http://ilearn.ilabt.imec.be/vocab/curr1/s-computers-en-systemen'
|
||||
];
|
||||
learningObject.copyright = "dwengo";
|
||||
learningObject.license = "dwengo";
|
||||
learningObject.estimatedTime = 10;
|
||||
|
||||
let returnValue = new ReturnValue();
|
||||
returnValue.callbackUrl = "callback_url_example";
|
||||
returnValue.callbackSchema = `{
|
||||
att: "test",
|
||||
att2: "test2"
|
||||
}`;
|
||||
|
||||
learningObject.returnValue = returnValue;
|
||||
learningObject.available = true;
|
||||
learningObject.content = loadTestAsset(`${ASSETS_PREFIX}/dwengo.png`);
|
||||
|
||||
return learningObject
|
||||
},
|
||||
createAttachment: {
|
||||
dwengoLogo: (learningObject) => {
|
||||
let att = new Attachment();
|
||||
att.learningObject = learningObject;
|
||||
att.name = "dwengo.png";
|
||||
att.mimeType = "image/png";
|
||||
att.content = loadTestAsset(`${ASSETS_PREFIX}/dwengo.png`)
|
||||
return att;
|
||||
},
|
||||
knop: (learningObject) => {
|
||||
let att = new Attachment();
|
||||
att.learningObject = learningObject;
|
||||
att.name = "Knop.png";
|
||||
att.mimeType = "image/png";
|
||||
att.content = loadTestAsset(`${ASSETS_PREFIX}/Knop.png`)
|
||||
return att;
|
||||
}
|
||||
}
|
||||
}
|
||||
export default example;
|
3
backend/tests/test-assets/learning-paths/learning-path-example.d.ts
vendored
Normal file
3
backend/tests/test-assets/learning-paths/learning-path-example.d.ts
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
type LearningPathExample = {
|
||||
createLearningPath: () => LearningPath
|
||||
};
|
|
@ -0,0 +1,24 @@
|
|||
import {Language} from "../../../src/entities/content/language";
|
||||
import {LearningPathTransition} from "../../../src/entities/content/learning-path-transition.entity";
|
||||
import {LearningPathNode} from "../../../src/entities/content/learning-path-node.entity";
|
||||
|
||||
export function createLearningPathTransition(condition: string | null, to: LearningPathNode) {
|
||||
let trans = new LearningPathTransition();
|
||||
trans.condition = condition || "true";
|
||||
trans.next = to;
|
||||
return trans;
|
||||
}
|
||||
|
||||
export function createLearningPathNode(
|
||||
learningObjectHruid: string,
|
||||
version: number,
|
||||
language: Language,
|
||||
startNode: boolean
|
||||
) {
|
||||
let node = new LearningPathNode();
|
||||
node.learningObjectHruid = learningObjectHruid;
|
||||
node.version = version;
|
||||
node.language = language;
|
||||
node.startNode = startNode;
|
||||
return node;
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
import {LearningPath, LearningPathNode} from "../../../src/entities/content/learning-path.entity";
|
||||
import {Language} from "../../../src/entities/content/language";
|
||||
import {EnvVars, getEnvVar} from "../../../src/util/envvars";
|
||||
import {createLearningPathNode, createLearningPathTransition} from "./learning-path-utils";
|
||||
|
||||
function createNodes(): LearningPathNode[] {
|
||||
let nodes = [
|
||||
createLearningPathNode("u_pn_werkingnotebooks", 3, Language.Dutch, true),
|
||||
createLearningPathNode("pn_werkingnotebooks2", 3, Language.Dutch, false),
|
||||
createLearningPathNode("pn_werkingnotebooks3", 3, Language.Dutch, false),
|
||||
];
|
||||
nodes[0].transitions.push(createLearningPathTransition("true", nodes[1]));
|
||||
nodes[1].transitions.push(createLearningPathTransition("true", nodes[2]));
|
||||
return nodes;
|
||||
}
|
||||
|
||||
const example: LearningPathExample = {
|
||||
createLearningPath: () => {
|
||||
const path = new LearningPath();
|
||||
path.language = Language.Dutch;
|
||||
path.hruid = `${getEnvVar(EnvVars.UserContentPrefix)}pn_werking`;
|
||||
path.title = "Werken met notebooks";
|
||||
path.description = "Een korte inleiding tot Python notebooks. Hoe ga je gemakkelijk en efficiënt met de notebooks aan de slag?";
|
||||
path.nodes = createNodes();
|
||||
return path;
|
||||
}
|
||||
}
|
||||
|
||||
export default example;
|
Loading…
Add table
Add a link
Reference in a new issue