From 8bf927d1c959a58cac457d91f10d37a4f3810bf3 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Mon, 31 Mar 2025 18:31:12 +0200 Subject: [PATCH 01/19] refactor(common): Introduceer common package --- common/package.json | 12 ++++++++++++ common/tsconfig.json | 9 +++++++++ package-lock.json | 9 +++++++++ package.json | 11 ++++++----- 4 files changed, 36 insertions(+), 5 deletions(-) create mode 100644 common/package.json create mode 100644 common/tsconfig.json diff --git a/common/package.json b/common/package.json new file mode 100644 index 00000000..68e7a56b --- /dev/null +++ b/common/package.json @@ -0,0 +1,12 @@ +{ + "name": "dwengo-1-common", + "version": "0.1.1", + "description": "Common types and utilities for Dwengo-1", + "private": true, + "type": "module", + "scripts": { + "format": "prettier --write src/", + "format-check": "prettier --check src/", + "lint": "eslint . --fix" + } +} diff --git a/common/tsconfig.json b/common/tsconfig.json new file mode 100644 index 00000000..2dd3998d --- /dev/null +++ b/common/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../tsconfig.json", + "include": ["src/**/*.ts"], + "compilerOptions": { + "rootDir": "./src", + "outDir": "./dist", + "resolveJsonModule": true + } +} diff --git a/package-lock.json b/package-lock.json index c54f2f5f..863bd035 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "license": "MIT", "workspaces": [ "backend", + "common", "frontend", "docs" ], @@ -81,6 +82,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "common": { + "name": "dwengo-1-common", + "version": "0.1.1" + }, "docs": { "name": "dwengo-1-docs", "version": "0.0.1", @@ -4011,6 +4016,10 @@ "resolved": "backend", "link": true }, + "node_modules/dwengo-1-common": { + "resolved": "common", + "link": true + }, "node_modules/dwengo-1-docs": { "resolved": "docs", "link": true diff --git a/package.json b/package.json index 7adeb3aa..56e3d01c 100644 --- a/package.json +++ b/package.json @@ -5,14 +5,15 @@ "private": true, "type": "module", "scripts": { - "build": "npm run build --ws", - "format": "npm run format --ws", - "format-check": "npm run format-check --ws", - "lint": "npm run lint --ws", - "test:unit": "npm run test:unit --ws" + "build": "npm run build --workspace=backend --workspace=frontend", + "format": "npm run format --workspace=backend --workspace=common --workspace=frontend", + "format-check": "npm run format-check --workspace=backend --workspace=common --workspace=frontend", + "lint": "npm run lint --workspace=backend --workspace=common --workspace=frontend", + "test:unit": "npm run test:unit --workspace=backend --workspace=frontend" }, "workspaces": [ "backend", + "common", "frontend", "docs" ], From 6c9c8d782dc6aa61a7a5c314530afce70522c7fc Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Mon, 31 Mar 2025 18:40:19 +0200 Subject: [PATCH 02/19] refactor(common): AnswerDTO --- backend/src/interfaces/answer.ts | 19 +++---------------- common/src/interfaces/answer.d.ts | 16 ++++++++++++++++ 2 files changed, 19 insertions(+), 16 deletions(-) create mode 100644 common/src/interfaces/answer.d.ts diff --git a/backend/src/interfaces/answer.ts b/backend/src/interfaces/answer.ts index 493fd3c0..b62aa741 100644 --- a/backend/src/interfaces/answer.ts +++ b/backend/src/interfaces/answer.ts @@ -1,14 +1,7 @@ -import { mapToUserDTO, UserDTO } from './user.js'; -import { mapToQuestionDTO, mapToQuestionId, QuestionDTO, QuestionId } from './question.js'; +import { mapToUserDTO } from './user.js'; +import { mapToQuestionDTO, mapToQuestionId } from './question.js'; import { Answer } from '../entities/questions/answer.entity.js'; - -export interface AnswerDTO { - author: UserDTO; - toQuestion: QuestionDTO; - sequenceNumber: number; - timestamp: string; - content: string; -} +import { AnswerDTO, AnswerId } from 'dwengo-1-common/src/interfaces/answer'; /** * Convert a Question entity to a DTO format. @@ -23,12 +16,6 @@ export function mapToAnswerDTO(answer: Answer): AnswerDTO { }; } -export interface AnswerId { - author: string; - toQuestion: QuestionId; - sequenceNumber: number; -} - export function mapToAnswerId(answer: AnswerDTO): AnswerId { return { author: answer.author.username, diff --git a/common/src/interfaces/answer.d.ts b/common/src/interfaces/answer.d.ts new file mode 100644 index 00000000..96ed063b --- /dev/null +++ b/common/src/interfaces/answer.d.ts @@ -0,0 +1,16 @@ +import { UserDTO } from 'dwengo-1-backend/src/interfaces/user.js' +import { QuestionDTO } from 'dwengo-1-backend/src/interfaces/question.js' + +export interface AnswerDTO { + author: UserDTO; + toQuestion: QuestionDTO; + sequenceNumber: number; + timestamp: string; + content: string; +} + +export interface AnswerId { + author: string; + toQuestion: QuestionId; + sequenceNumber: number; +} From 4b1c343592be96f2649696543f8f598466e375a7 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Mon, 31 Mar 2025 18:50:00 +0200 Subject: [PATCH 03/19] fix(backend): Build common in Docker --- backend/Dockerfile | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/backend/Dockerfile b/backend/Dockerfile index 7c63c4b8..c945a107 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -6,6 +6,7 @@ WORKDIR /app COPY package*.json ./ COPY backend/package.json ./backend/ +COPY common/package.json ./common/ RUN npm install --silent @@ -14,10 +15,11 @@ RUN npm install --silent # Root tsconfig.json COPY tsconfig.json ./ -WORKDIR /app/backend +COPY backend ./backend +COPY common ./common +COPY docs ./docs -COPY backend ./ -COPY docs /app/docs +WORKDIR /app/backend RUN npm run build From 757c89d8413e56ad80c4bcee38e6c38bc8cbcf98 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Mon, 31 Mar 2025 19:03:13 +0200 Subject: [PATCH 04/19] refactor(common): Assignments --- backend/src/controllers/assignments.ts | 3 ++- backend/src/interfaces/assignment.ts | 12 +----------- backend/src/interfaces/group.ts | 3 ++- backend/src/services/assignments.ts | 3 ++- backend/src/services/students.ts | 2 +- common/src/interfaces/answer.d.ts | 4 ++-- common/src/interfaces/assignment.d.ts | 11 +++++++++++ 7 files changed, 21 insertions(+), 17 deletions(-) create mode 100644 common/src/interfaces/assignment.d.ts diff --git a/backend/src/controllers/assignments.ts b/backend/src/controllers/assignments.ts index 16dbb310..e2978363 100644 --- a/backend/src/controllers/assignments.ts +++ b/backend/src/controllers/assignments.ts @@ -1,6 +1,7 @@ import { Request, Response } from 'express'; import { createAssignment, getAllAssignments, getAssignment, getAssignmentsSubmissions } from '../services/assignments.js'; -import { AssignmentDTO } from '../interfaces/assignment.js'; + +import { AssignmentDTO } from 'dwengo-1-common/src/interfaces/assignment'; // Typescript is annoy with with parameter forwarding from class.ts interface AssignmentParams { diff --git a/backend/src/interfaces/assignment.ts b/backend/src/interfaces/assignment.ts index eefa8c96..c437f155 100644 --- a/backend/src/interfaces/assignment.ts +++ b/backend/src/interfaces/assignment.ts @@ -2,17 +2,7 @@ import { FALLBACK_LANG } from '../config.js'; import { Assignment } from '../entities/assignments/assignment.entity.js'; import { Class } from '../entities/classes/class.entity.js'; import { languageMap } from '../entities/content/language.js'; -import { GroupDTO } from './group.js'; - -export interface AssignmentDTO { - id: number; - class: string; // Id of class 'within' - title: string; - description: string; - learningPath: string; - language: string; - groups?: GroupDTO[] | string[]; // TODO -} +import { AssignmentDTO } from 'dwengo-1-common/src/interfaces/assignment'; export function mapToAssignmentDTOId(assignment: Assignment): AssignmentDTO { return { diff --git a/backend/src/interfaces/group.ts b/backend/src/interfaces/group.ts index a25c5b8e..93701dce 100644 --- a/backend/src/interfaces/group.ts +++ b/backend/src/interfaces/group.ts @@ -1,6 +1,7 @@ import { Group } from '../entities/assignments/group.entity.js'; -import { AssignmentDTO, mapToAssignmentDTO } from './assignment.js'; +import { mapToAssignmentDTO } from './assignment.js'; import { mapToStudentDTO, StudentDTO } from './student.js'; +import { AssignmentDTO } from 'dwengo-1-common/src/interfaces/assignment'; export interface GroupDTO { assignment: number | AssignmentDTO; diff --git a/backend/src/services/assignments.ts b/backend/src/services/assignments.ts index a21a96fa..0d8807c5 100644 --- a/backend/src/services/assignments.ts +++ b/backend/src/services/assignments.ts @@ -1,6 +1,7 @@ import { getAssignmentRepository, getClassRepository, getGroupRepository, getSubmissionRepository } from '../data/repositories.js'; -import { AssignmentDTO, mapToAssignment, mapToAssignmentDTO, mapToAssignmentDTOId } from '../interfaces/assignment.js'; +import { mapToAssignment, mapToAssignmentDTO, mapToAssignmentDTOId } from '../interfaces/assignment.js'; import { mapToSubmissionDTO, mapToSubmissionDTOId, SubmissionDTO, SubmissionDTOId } from '../interfaces/submission.js'; +import { AssignmentDTO } from 'dwengo-1-common/src/interfaces/assignment'; export async function getAllAssignments(classid: string, full: boolean): Promise { const classRepository = getClassRepository(); diff --git a/backend/src/services/students.ts b/backend/src/services/students.ts index 66327b6d..5382a67c 100644 --- a/backend/src/services/students.ts +++ b/backend/src/services/students.ts @@ -1,10 +1,10 @@ import { getClassRepository, getGroupRepository, getStudentRepository, getSubmissionRepository } from '../data/repositories.js'; -import { AssignmentDTO } from '../interfaces/assignment.js'; import { ClassDTO, mapToClassDTO } from '../interfaces/class.js'; import { GroupDTO, mapToGroupDTO, mapToGroupDTOId } from '../interfaces/group.js'; import { mapToStudent, mapToStudentDTO, StudentDTO } from '../interfaces/student.js'; import { mapToSubmissionDTO, mapToSubmissionDTOId, SubmissionDTO, SubmissionDTOId } from '../interfaces/submission.js'; import { getAllAssignments } from './assignments.js'; +import { AssignmentDTO } from 'dwengo-1-common/src/interfaces/assignment'; export async function getAllStudents(full: boolean): Promise { const studentRepository = getStudentRepository(); diff --git a/common/src/interfaces/answer.d.ts b/common/src/interfaces/answer.d.ts index 96ed063b..88cc07be 100644 --- a/common/src/interfaces/answer.d.ts +++ b/common/src/interfaces/answer.d.ts @@ -1,5 +1,5 @@ -import { UserDTO } from 'dwengo-1-backend/src/interfaces/user.js' -import { QuestionDTO } from 'dwengo-1-backend/src/interfaces/question.js' +import { UserDTO } from 'dwengo-1-backend/src/interfaces/user.js'; +import { QuestionDTO } from 'dwengo-1-backend/src/interfaces/question.js'; export interface AnswerDTO { author: UserDTO; diff --git a/common/src/interfaces/assignment.d.ts b/common/src/interfaces/assignment.d.ts new file mode 100644 index 00000000..88bf10c6 --- /dev/null +++ b/common/src/interfaces/assignment.d.ts @@ -0,0 +1,11 @@ +import { GroupDTO } from 'dwengo-1-backend/src/interfaces/group.js'; + +export interface AssignmentDTO { + id: number; + class: string; // Id of class 'within' + title: string; + description: string; + learningPath: string; + language: string; + groups?: GroupDTO[] | string[]; // TODO +} From 24ed39d04e8cb129f5cf7307a1b502e8268b7815 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Mon, 31 Mar 2025 19:06:14 +0200 Subject: [PATCH 05/19] refactor(common): Class --- backend/src/controllers/classes.ts | 3 ++- backend/src/interfaces/class.ts | 9 +-------- backend/src/interfaces/teacher-invitation.ts | 3 ++- backend/src/services/classes.ts | 3 ++- backend/src/services/students.ts | 3 ++- backend/src/services/teachers.ts | 3 ++- common/src/interfaces/class.d.ts | 7 +++++++ 7 files changed, 18 insertions(+), 13 deletions(-) create mode 100644 common/src/interfaces/class.d.ts diff --git a/backend/src/controllers/classes.ts b/backend/src/controllers/classes.ts index 7526f7c4..40683c6a 100644 --- a/backend/src/controllers/classes.ts +++ b/backend/src/controllers/classes.ts @@ -1,6 +1,7 @@ import { Request, Response } from 'express'; import { createClass, getAllClasses, getClass, getClassStudents, getClassStudentsIds, getClassTeacherInvitations } from '../services/classes.js'; -import { ClassDTO } from '../interfaces/class.js'; + +import { ClassDTO } from 'dwengo-1-common/src/interfaces/class'; export async function getAllClassesHandler(req: Request, res: Response): Promise { const full = req.query.full === 'true'; diff --git a/backend/src/interfaces/class.ts b/backend/src/interfaces/class.ts index ea1d4901..c711b94b 100644 --- a/backend/src/interfaces/class.ts +++ b/backend/src/interfaces/class.ts @@ -2,14 +2,7 @@ import { Collection } from '@mikro-orm/core'; import { Class } from '../entities/classes/class.entity.js'; import { Student } from '../entities/users/student.entity.js'; import { Teacher } from '../entities/users/teacher.entity.js'; - -export interface ClassDTO { - id: string; - displayName: string; - teachers: string[]; - students: string[]; - joinRequests: string[]; -} +import { ClassDTO } from 'dwengo-1-common/src/interfaces/class'; export function mapToClassDTO(cls: Class): ClassDTO { return { diff --git a/backend/src/interfaces/teacher-invitation.ts b/backend/src/interfaces/teacher-invitation.ts index cddef566..a28aed5c 100644 --- a/backend/src/interfaces/teacher-invitation.ts +++ b/backend/src/interfaces/teacher-invitation.ts @@ -1,6 +1,7 @@ import { TeacherInvitation } from '../entities/classes/teacher-invitation.entity.js'; -import { ClassDTO, mapToClassDTO } from './class.js'; +import { mapToClassDTO } from './class.js'; import { mapToUserDTO, UserDTO } from './user.js'; +import { ClassDTO } from 'dwengo-1-common/src/interfaces/class'; export interface TeacherInvitationDTO { sender: string | UserDTO; diff --git a/backend/src/services/classes.ts b/backend/src/services/classes.ts index 5b1e3cfc..542f8f19 100644 --- a/backend/src/services/classes.ts +++ b/backend/src/services/classes.ts @@ -1,8 +1,9 @@ import { getClassRepository, getStudentRepository, getTeacherInvitationRepository, getTeacherRepository } from '../data/repositories.js'; -import { ClassDTO, mapToClassDTO } from '../interfaces/class.js'; +import { mapToClassDTO } from '../interfaces/class.js'; import { mapToStudentDTO, StudentDTO } from '../interfaces/student.js'; import { mapToTeacherInvitationDTO, mapToTeacherInvitationDTOIds, TeacherInvitationDTO } from '../interfaces/teacher-invitation.js'; import { getLogger } from '../logging/initalize.js'; +import { ClassDTO } from 'dwengo-1-common/src/interfaces/class'; const logger = getLogger(); diff --git a/backend/src/services/students.ts b/backend/src/services/students.ts index 5382a67c..931162ff 100644 --- a/backend/src/services/students.ts +++ b/backend/src/services/students.ts @@ -1,10 +1,11 @@ import { getClassRepository, getGroupRepository, getStudentRepository, getSubmissionRepository } from '../data/repositories.js'; -import { ClassDTO, mapToClassDTO } from '../interfaces/class.js'; +import { mapToClassDTO } from '../interfaces/class.js'; import { GroupDTO, mapToGroupDTO, mapToGroupDTOId } from '../interfaces/group.js'; import { mapToStudent, mapToStudentDTO, StudentDTO } from '../interfaces/student.js'; import { mapToSubmissionDTO, mapToSubmissionDTOId, SubmissionDTO, SubmissionDTOId } from '../interfaces/submission.js'; import { getAllAssignments } from './assignments.js'; import { AssignmentDTO } from 'dwengo-1-common/src/interfaces/assignment'; +import { ClassDTO } from 'dwengo-1-common/src/interfaces/class'; export async function getAllStudents(full: boolean): Promise { const studentRepository = getStudentRepository(); diff --git a/backend/src/services/teachers.ts b/backend/src/services/teachers.ts index fced2b61..eca54214 100644 --- a/backend/src/services/teachers.ts +++ b/backend/src/services/teachers.ts @@ -1,9 +1,10 @@ import { getClassRepository, getLearningObjectRepository, getQuestionRepository, getTeacherRepository } from '../data/repositories.js'; -import { ClassDTO, mapToClassDTO } from '../interfaces/class.js'; +import { mapToClassDTO } from '../interfaces/class.js'; import { getClassStudents } from './classes.js'; import { StudentDTO } from '../interfaces/student.js'; import { mapToQuestionDTO, mapToQuestionId, QuestionDTO, QuestionId } from '../interfaces/question.js'; import { mapToTeacher, mapToTeacherDTO, TeacherDTO } from '../interfaces/teacher.js'; +import { ClassDTO } from 'dwengo-1-common/src/interfaces/class'; export async function getAllTeachers(full: boolean): Promise { const teacherRepository = getTeacherRepository(); diff --git a/common/src/interfaces/class.d.ts b/common/src/interfaces/class.d.ts new file mode 100644 index 00000000..c35c2dfc --- /dev/null +++ b/common/src/interfaces/class.d.ts @@ -0,0 +1,7 @@ +export interface ClassDTO { + id: string; + displayName: string; + teachers: string[]; + students: string[]; + joinRequests: string[]; +} From 1a0704c16fd748d2f6e0e50d08735fd9baff5228 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Mon, 31 Mar 2025 19:09:23 +0200 Subject: [PATCH 06/19] refactor(common): Group --- backend/src/controllers/groups.ts | 3 ++- backend/src/interfaces/group.ts | 10 ++-------- backend/src/interfaces/submission.ts | 3 ++- backend/src/services/groups.ts | 3 ++- backend/src/services/students.ts | 3 ++- common/src/interfaces/assignment.d.ts | 2 +- common/src/interfaces/group.d.ts | 7 +++++++ 7 files changed, 18 insertions(+), 13 deletions(-) create mode 100644 common/src/interfaces/group.d.ts diff --git a/backend/src/controllers/groups.ts b/backend/src/controllers/groups.ts index 38d5d5d0..c7da61d8 100644 --- a/backend/src/controllers/groups.ts +++ b/backend/src/controllers/groups.ts @@ -1,6 +1,7 @@ import { Request, Response } from 'express'; import { createGroup, getAllGroups, getGroup, getGroupSubmissions } from '../services/groups.js'; -import { GroupDTO } from '../interfaces/group.js'; + +import { GroupDTO } from 'dwengo-1-common/src/interfaces/group'; // Typescript is annoywith with parameter forwarding from class.ts interface GroupParams { diff --git a/backend/src/interfaces/group.ts b/backend/src/interfaces/group.ts index 93701dce..9f71e3f7 100644 --- a/backend/src/interfaces/group.ts +++ b/backend/src/interfaces/group.ts @@ -1,13 +1,7 @@ import { Group } from '../entities/assignments/group.entity.js'; import { mapToAssignmentDTO } from './assignment.js'; -import { mapToStudentDTO, StudentDTO } from './student.js'; -import { AssignmentDTO } from 'dwengo-1-common/src/interfaces/assignment'; - -export interface GroupDTO { - assignment: number | AssignmentDTO; - groupNumber: number; - members: string[] | StudentDTO[]; -} +import { mapToStudentDTO } from './student.js'; +import { GroupDTO } from 'dwengo-1-common/src/interfaces/group'; export function mapToGroupDTO(group: Group): GroupDTO { return { diff --git a/backend/src/interfaces/submission.ts b/backend/src/interfaces/submission.ts index 98cc4f22..95afee70 100644 --- a/backend/src/interfaces/submission.ts +++ b/backend/src/interfaces/submission.ts @@ -1,8 +1,9 @@ import { Submission } from '../entities/assignments/submission.entity.js'; import { Language } from '../entities/content/language.js'; -import { GroupDTO, mapToGroupDTO } from './group.js'; +import { mapToGroupDTO } from './group.js'; import { mapToStudent, mapToStudentDTO, StudentDTO } from './student.js'; import { LearningObjectIdentifier } from './learning-content.js'; +import { GroupDTO } from 'dwengo-1-common/src/interfaces/group'; export interface SubmissionDTO { learningObjectIdentifier: LearningObjectIdentifier; diff --git a/backend/src/services/groups.ts b/backend/src/services/groups.ts index 4a1cbbf0..df8f02b7 100644 --- a/backend/src/services/groups.ts +++ b/backend/src/services/groups.ts @@ -6,8 +6,9 @@ import { getSubmissionRepository, } from '../data/repositories.js'; import { Group } from '../entities/assignments/group.entity.js'; -import { GroupDTO, mapToGroupDTO, mapToGroupDTOId } from '../interfaces/group.js'; +import { mapToGroupDTO, mapToGroupDTOId } from '../interfaces/group.js'; import { mapToSubmissionDTO, mapToSubmissionDTOId, SubmissionDTO, SubmissionDTOId } from '../interfaces/submission.js'; +import { GroupDTO } from 'dwengo-1-common/src/interfaces/group'; export async function getGroup(classId: string, assignmentNumber: number, groupNumber: number, full: boolean): Promise { const classRepository = getClassRepository(); diff --git a/backend/src/services/students.ts b/backend/src/services/students.ts index 931162ff..b8ab4650 100644 --- a/backend/src/services/students.ts +++ b/backend/src/services/students.ts @@ -1,11 +1,12 @@ import { getClassRepository, getGroupRepository, getStudentRepository, getSubmissionRepository } from '../data/repositories.js'; import { mapToClassDTO } from '../interfaces/class.js'; -import { GroupDTO, mapToGroupDTO, mapToGroupDTOId } from '../interfaces/group.js'; +import { mapToGroupDTO, mapToGroupDTOId } from '../interfaces/group.js'; import { mapToStudent, mapToStudentDTO, StudentDTO } from '../interfaces/student.js'; import { mapToSubmissionDTO, mapToSubmissionDTOId, SubmissionDTO, SubmissionDTOId } from '../interfaces/submission.js'; import { getAllAssignments } from './assignments.js'; import { AssignmentDTO } from 'dwengo-1-common/src/interfaces/assignment'; import { ClassDTO } from 'dwengo-1-common/src/interfaces/class'; +import { GroupDTO } from 'dwengo-1-common/src/interfaces/group'; export async function getAllStudents(full: boolean): Promise { const studentRepository = getStudentRepository(); diff --git a/common/src/interfaces/assignment.d.ts b/common/src/interfaces/assignment.d.ts index 88bf10c6..8ad1649b 100644 --- a/common/src/interfaces/assignment.d.ts +++ b/common/src/interfaces/assignment.d.ts @@ -1,4 +1,4 @@ -import { GroupDTO } from 'dwengo-1-backend/src/interfaces/group.js'; +import { GroupDTO } from './group'; export interface AssignmentDTO { id: number; diff --git a/common/src/interfaces/group.d.ts b/common/src/interfaces/group.d.ts new file mode 100644 index 00000000..45523461 --- /dev/null +++ b/common/src/interfaces/group.d.ts @@ -0,0 +1,7 @@ +import { AssignmentDTO } from './assignment'; + +export interface GroupDTO { + assignment: number | AssignmentDTO; + groupNumber: number; + members: string[] | StudentDTO[]; +} From 3b51b0f1f653a49fa20e801b689054e6b7fc03ac Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Mon, 31 Mar 2025 21:41:14 +0200 Subject: [PATCH 07/19] refactor(common): User --- backend/src/interfaces/teacher-invitation.ts | 3 ++- backend/src/interfaces/user.ts | 14 +------------- common/src/interfaces/answer.d.ts | 2 +- common/src/interfaces/user.d.ts | 12 ++++++++++++ 4 files changed, 16 insertions(+), 15 deletions(-) create mode 100644 common/src/interfaces/user.d.ts diff --git a/backend/src/interfaces/teacher-invitation.ts b/backend/src/interfaces/teacher-invitation.ts index a28aed5c..8a792280 100644 --- a/backend/src/interfaces/teacher-invitation.ts +++ b/backend/src/interfaces/teacher-invitation.ts @@ -1,7 +1,8 @@ import { TeacherInvitation } from '../entities/classes/teacher-invitation.entity.js'; import { mapToClassDTO } from './class.js'; -import { mapToUserDTO, UserDTO } from './user.js'; +import { mapToUserDTO } from './user.js'; import { ClassDTO } from 'dwengo-1-common/src/interfaces/class'; +import { UserDTO } from 'dwengo-1-common/src/interfaces/user'; export interface TeacherInvitationDTO { sender: string | UserDTO; diff --git a/backend/src/interfaces/user.ts b/backend/src/interfaces/user.ts index 58f0dd5a..ecc9dd77 100644 --- a/backend/src/interfaces/user.ts +++ b/backend/src/interfaces/user.ts @@ -1,17 +1,5 @@ import { User } from '../entities/users/user.entity.js'; - -export interface UserDTO { - id?: string; - username: string; - firstName: string; - lastName: string; - endpoints?: { - self: string; - classes: string; - questions: string; - invitations: string; - }; -} +import { UserDTO } from 'dwengo-1-common/src/interfaces/user'; export function mapToUserDTO(user: User): UserDTO { return { diff --git a/common/src/interfaces/answer.d.ts b/common/src/interfaces/answer.d.ts index 88cc07be..b8fc9b55 100644 --- a/common/src/interfaces/answer.d.ts +++ b/common/src/interfaces/answer.d.ts @@ -1,5 +1,5 @@ -import { UserDTO } from 'dwengo-1-backend/src/interfaces/user.js'; import { QuestionDTO } from 'dwengo-1-backend/src/interfaces/question.js'; +import { UserDTO } from './user'; export interface AnswerDTO { author: UserDTO; diff --git a/common/src/interfaces/user.d.ts b/common/src/interfaces/user.d.ts new file mode 100644 index 00000000..e7bbe2ed --- /dev/null +++ b/common/src/interfaces/user.d.ts @@ -0,0 +1,12 @@ +export interface UserDTO { + id?: string; + username: string; + firstName: string; + lastName: string; + endpoints?: { + self: string; + classes: string; + questions: string; + invitations: string; + }; +} From 6ff29cb9493462618270353f5a983d8101dbb92d Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Mon, 31 Mar 2025 21:43:17 +0200 Subject: [PATCH 08/19] refactor(common): Teacher --- backend/src/controllers/teachers.ts | 3 ++- backend/src/interfaces/teacher-invitation.ts | 9 +-------- backend/src/interfaces/teacher.ts | 14 +------------- backend/src/services/classes.ts | 3 ++- backend/src/services/teachers.ts | 3 ++- common/src/interfaces/teacher-invitation.d.ts | 8 ++++++++ common/src/interfaces/teacher.d.ts | 12 ++++++++++++ 7 files changed, 28 insertions(+), 24 deletions(-) create mode 100644 common/src/interfaces/teacher-invitation.d.ts create mode 100644 common/src/interfaces/teacher.d.ts diff --git a/backend/src/controllers/teachers.ts b/backend/src/controllers/teachers.ts index 7376abed..7f1beb54 100644 --- a/backend/src/controllers/teachers.ts +++ b/backend/src/controllers/teachers.ts @@ -8,7 +8,8 @@ import { getStudentsByTeacher, getTeacher, } from '../services/teachers.js'; -import { TeacherDTO } from '../interfaces/teacher.js'; + +import { TeacherDTO } from 'dwengo-1-common/src/interfaces/teacher'; export async function getAllTeachersHandler(req: Request, res: Response): Promise { const full = req.query.full === 'true'; diff --git a/backend/src/interfaces/teacher-invitation.ts b/backend/src/interfaces/teacher-invitation.ts index 8a792280..8df92fd1 100644 --- a/backend/src/interfaces/teacher-invitation.ts +++ b/backend/src/interfaces/teacher-invitation.ts @@ -1,14 +1,7 @@ import { TeacherInvitation } from '../entities/classes/teacher-invitation.entity.js'; import { mapToClassDTO } from './class.js'; import { mapToUserDTO } from './user.js'; -import { ClassDTO } from 'dwengo-1-common/src/interfaces/class'; -import { UserDTO } from 'dwengo-1-common/src/interfaces/user'; - -export interface TeacherInvitationDTO { - sender: string | UserDTO; - receiver: string | UserDTO; - class: string | ClassDTO; -} +import { TeacherInvitationDTO } from 'dwengo-1-common/src/interfaces/teacher-invitation'; export function mapToTeacherInvitationDTO(invitation: TeacherInvitation): TeacherInvitationDTO { return { diff --git a/backend/src/interfaces/teacher.ts b/backend/src/interfaces/teacher.ts index 31b4723f..a1ba33fd 100644 --- a/backend/src/interfaces/teacher.ts +++ b/backend/src/interfaces/teacher.ts @@ -1,18 +1,6 @@ import { Teacher } from '../entities/users/teacher.entity.js'; import { getTeacherRepository } from '../data/repositories.js'; - -export interface TeacherDTO { - id: string; - username: string; - firstName: string; - lastName: string; - endpoints?: { - classes: string; - questions: string; - invitations: string; - groups: string; - }; -} +import { TeacherDTO } from 'dwengo-1-common/src/interfaces/teacher'; export function mapToTeacherDTO(teacher: Teacher): TeacherDTO { return { diff --git a/backend/src/services/classes.ts b/backend/src/services/classes.ts index 542f8f19..ecc4b43e 100644 --- a/backend/src/services/classes.ts +++ b/backend/src/services/classes.ts @@ -1,9 +1,10 @@ import { getClassRepository, getStudentRepository, getTeacherInvitationRepository, getTeacherRepository } from '../data/repositories.js'; import { mapToClassDTO } from '../interfaces/class.js'; import { mapToStudentDTO, StudentDTO } from '../interfaces/student.js'; -import { mapToTeacherInvitationDTO, mapToTeacherInvitationDTOIds, TeacherInvitationDTO } from '../interfaces/teacher-invitation.js'; +import { mapToTeacherInvitationDTO, mapToTeacherInvitationDTOIds } from '../interfaces/teacher-invitation.js'; import { getLogger } from '../logging/initalize.js'; import { ClassDTO } from 'dwengo-1-common/src/interfaces/class'; +import { TeacherInvitationDTO } from 'dwengo-1-common/src/interfaces/teacher-invitation'; const logger = getLogger(); diff --git a/backend/src/services/teachers.ts b/backend/src/services/teachers.ts index eca54214..9589d0ba 100644 --- a/backend/src/services/teachers.ts +++ b/backend/src/services/teachers.ts @@ -3,8 +3,9 @@ import { mapToClassDTO } from '../interfaces/class.js'; import { getClassStudents } from './classes.js'; import { StudentDTO } from '../interfaces/student.js'; import { mapToQuestionDTO, mapToQuestionId, QuestionDTO, QuestionId } from '../interfaces/question.js'; -import { mapToTeacher, mapToTeacherDTO, TeacherDTO } from '../interfaces/teacher.js'; +import { mapToTeacher, mapToTeacherDTO } from '../interfaces/teacher.js'; import { ClassDTO } from 'dwengo-1-common/src/interfaces/class'; +import { TeacherDTO } from 'dwengo-1-common/src/interfaces/teacher'; export async function getAllTeachers(full: boolean): Promise { const teacherRepository = getTeacherRepository(); diff --git a/common/src/interfaces/teacher-invitation.d.ts b/common/src/interfaces/teacher-invitation.d.ts new file mode 100644 index 00000000..13709322 --- /dev/null +++ b/common/src/interfaces/teacher-invitation.d.ts @@ -0,0 +1,8 @@ +import { UserDTO } from './user'; +import { ClassDTO } from './class'; + +export interface TeacherInvitationDTO { + sender: string | UserDTO; + receiver: string | UserDTO; + class: string | ClassDTO; +} diff --git a/common/src/interfaces/teacher.d.ts b/common/src/interfaces/teacher.d.ts new file mode 100644 index 00000000..05bf74a0 --- /dev/null +++ b/common/src/interfaces/teacher.d.ts @@ -0,0 +1,12 @@ +export interface TeacherDTO { + id: string; + username: string; + firstName: string; + lastName: string; + endpoints?: { + classes: string; + questions: string; + invitations: string; + groups: string; + }; +} From bc8e8883737b16e483db24e183c0fd385bdbcea0 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Mon, 31 Mar 2025 21:46:49 +0200 Subject: [PATCH 09/19] refactor(common): Submission --- backend/src/controllers/submissions.ts | 3 ++- backend/src/interfaces/submission.ts | 24 ++---------------------- backend/src/services/assignments.ts | 3 ++- backend/src/services/groups.ts | 3 ++- backend/src/services/students.ts | 3 ++- backend/src/services/submissions.ts | 3 ++- common/src/interfaces/submission.d.ts | 19 +++++++++++++++++++ 7 files changed, 31 insertions(+), 27 deletions(-) create mode 100644 common/src/interfaces/submission.d.ts diff --git a/backend/src/controllers/submissions.ts b/backend/src/controllers/submissions.ts index 512ac22e..9ef2df6e 100644 --- a/backend/src/controllers/submissions.ts +++ b/backend/src/controllers/submissions.ts @@ -1,7 +1,8 @@ import { Request, Response } from 'express'; import { createSubmission, deleteSubmission, getSubmission } from '../services/submissions.js'; import { Language, languageMap } from '../entities/content/language.js'; -import { SubmissionDTO } from '../interfaces/submission'; + +import { SubmissionDTO } from 'dwengo-1-common/src/interfaces/submission'; interface SubmissionParams { hruid: string; diff --git a/backend/src/interfaces/submission.ts b/backend/src/interfaces/submission.ts index 95afee70..9a506b27 100644 --- a/backend/src/interfaces/submission.ts +++ b/backend/src/interfaces/submission.ts @@ -1,27 +1,7 @@ import { Submission } from '../entities/assignments/submission.entity.js'; -import { Language } from '../entities/content/language.js'; import { mapToGroupDTO } from './group.js'; -import { mapToStudent, mapToStudentDTO, StudentDTO } from './student.js'; -import { LearningObjectIdentifier } from './learning-content.js'; -import { GroupDTO } from 'dwengo-1-common/src/interfaces/group'; - -export interface SubmissionDTO { - learningObjectIdentifier: LearningObjectIdentifier; - - submissionNumber?: number; - submitter: StudentDTO; - time?: Date; - group?: GroupDTO; - content: string; -} - -export interface SubmissionDTOId { - learningObjectHruid: string; - learningObjectLanguage: Language; - learningObjectVersion: number; - - submissionNumber?: number; -} +import { mapToStudent, mapToStudentDTO } from './student.js'; +import { SubmissionDTO, SubmissionDTOId } from 'dwengo-1-common/src/interfaces/submission'; export function mapToSubmissionDTO(submission: Submission): SubmissionDTO { return { diff --git a/backend/src/services/assignments.ts b/backend/src/services/assignments.ts index 0d8807c5..278098bd 100644 --- a/backend/src/services/assignments.ts +++ b/backend/src/services/assignments.ts @@ -1,7 +1,8 @@ import { getAssignmentRepository, getClassRepository, getGroupRepository, getSubmissionRepository } from '../data/repositories.js'; import { mapToAssignment, mapToAssignmentDTO, mapToAssignmentDTOId } from '../interfaces/assignment.js'; -import { mapToSubmissionDTO, mapToSubmissionDTOId, SubmissionDTO, SubmissionDTOId } from '../interfaces/submission.js'; +import { mapToSubmissionDTO, mapToSubmissionDTOId } from '../interfaces/submission.js'; import { AssignmentDTO } from 'dwengo-1-common/src/interfaces/assignment'; +import { SubmissionDTO, SubmissionDTOId } from 'dwengo-1-common/src/interfaces/submission'; export async function getAllAssignments(classid: string, full: boolean): Promise { const classRepository = getClassRepository(); diff --git a/backend/src/services/groups.ts b/backend/src/services/groups.ts index df8f02b7..42c51c20 100644 --- a/backend/src/services/groups.ts +++ b/backend/src/services/groups.ts @@ -7,8 +7,9 @@ import { } from '../data/repositories.js'; import { Group } from '../entities/assignments/group.entity.js'; import { mapToGroupDTO, mapToGroupDTOId } from '../interfaces/group.js'; -import { mapToSubmissionDTO, mapToSubmissionDTOId, SubmissionDTO, SubmissionDTOId } from '../interfaces/submission.js'; +import { mapToSubmissionDTO, mapToSubmissionDTOId } from '../interfaces/submission.js'; import { GroupDTO } from 'dwengo-1-common/src/interfaces/group'; +import { SubmissionDTO, SubmissionDTOId } from 'dwengo-1-common/src/interfaces/submission'; export async function getGroup(classId: string, assignmentNumber: number, groupNumber: number, full: boolean): Promise { const classRepository = getClassRepository(); diff --git a/backend/src/services/students.ts b/backend/src/services/students.ts index b8ab4650..f8d92486 100644 --- a/backend/src/services/students.ts +++ b/backend/src/services/students.ts @@ -2,11 +2,12 @@ import { getClassRepository, getGroupRepository, getStudentRepository, getSubmis import { mapToClassDTO } from '../interfaces/class.js'; import { mapToGroupDTO, mapToGroupDTOId } from '../interfaces/group.js'; import { mapToStudent, mapToStudentDTO, StudentDTO } from '../interfaces/student.js'; -import { mapToSubmissionDTO, mapToSubmissionDTOId, SubmissionDTO, SubmissionDTOId } from '../interfaces/submission.js'; +import { mapToSubmissionDTO, mapToSubmissionDTOId } from '../interfaces/submission.js'; import { getAllAssignments } from './assignments.js'; import { AssignmentDTO } from 'dwengo-1-common/src/interfaces/assignment'; import { ClassDTO } from 'dwengo-1-common/src/interfaces/class'; import { GroupDTO } from 'dwengo-1-common/src/interfaces/group'; +import { SubmissionDTO, SubmissionDTOId } from 'dwengo-1-common/src/interfaces/submission'; export async function getAllStudents(full: boolean): Promise { const studentRepository = getStudentRepository(); diff --git a/backend/src/services/submissions.ts b/backend/src/services/submissions.ts index 0e1ad9ac..0fa9811d 100644 --- a/backend/src/services/submissions.ts +++ b/backend/src/services/submissions.ts @@ -1,7 +1,8 @@ import { getGroupRepository, getSubmissionRepository } from '../data/repositories.js'; import { Language } from '../entities/content/language.js'; import { LearningObjectIdentifier } from '../entities/content/learning-object-identifier.js'; -import { mapToSubmission, mapToSubmissionDTO, SubmissionDTO } from '../interfaces/submission.js'; +import { mapToSubmission, mapToSubmissionDTO } from '../interfaces/submission.js'; +import { SubmissionDTO } from 'dwengo-1-common/src/interfaces/submission'; export async function getSubmission( learningObjectHruid: string, diff --git a/common/src/interfaces/submission.d.ts b/common/src/interfaces/submission.d.ts new file mode 100644 index 00000000..c4c2b35d --- /dev/null +++ b/common/src/interfaces/submission.d.ts @@ -0,0 +1,19 @@ +import { GroupDTO } from './group'; + +export interface SubmissionDTO { + learningObjectIdentifier: LearningObjectIdentifier; + + submissionNumber?: number; + submitter: StudentDTO; + time?: Date; + group?: GroupDTO; + content: string; +} + +export interface SubmissionDTOId { + learningObjectHruid: string; + learningObjectLanguage: Language; + learningObjectVersion: number; + + submissionNumber?: number; +} From d6b79dccede103b1a47d4456ec652f3cd983cc99 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Mon, 31 Mar 2025 21:48:13 +0200 Subject: [PATCH 10/19] refactor(common): Student --- backend/src/controllers/students.ts | 3 ++- backend/src/interfaces/question.ts | 3 ++- backend/src/interfaces/student.ts | 14 +------------- backend/src/services/classes.ts | 3 ++- backend/src/services/students.ts | 3 ++- backend/src/services/teachers.ts | 2 +- common/src/interfaces/student.d.ts | 12 ++++++++++++ 7 files changed, 22 insertions(+), 18 deletions(-) create mode 100644 common/src/interfaces/student.d.ts diff --git a/backend/src/controllers/students.ts b/backend/src/controllers/students.ts index 8ce5b11a..4e23ebc4 100644 --- a/backend/src/controllers/students.ts +++ b/backend/src/controllers/students.ts @@ -9,7 +9,8 @@ import { getStudentGroups, getStudentSubmissions, } from '../services/students.js'; -import { StudentDTO } from '../interfaces/student.js'; + +import { StudentDTO } from 'dwengo-1-common/src/interfaces/student'; // TODO: accept arguments (full, ...) // TODO: endpoints diff --git a/backend/src/interfaces/question.ts b/backend/src/interfaces/question.ts index 0da87eb7..93019dae 100644 --- a/backend/src/interfaces/question.ts +++ b/backend/src/interfaces/question.ts @@ -1,6 +1,7 @@ import { Question } from '../entities/questions/question.entity.js'; import { LearningObjectIdentifier } from '../entities/content/learning-object-identifier.js'; -import { mapToStudentDTO, StudentDTO } from './student.js'; +import { mapToStudentDTO } from './student.js'; +import { StudentDTO } from 'dwengo-1-common/src/interfaces/student'; export interface QuestionDTO { learningObjectIdentifier: LearningObjectIdentifier; diff --git a/backend/src/interfaces/student.ts b/backend/src/interfaces/student.ts index ecce8f89..e1e4253f 100644 --- a/backend/src/interfaces/student.ts +++ b/backend/src/interfaces/student.ts @@ -1,18 +1,6 @@ import { Student } from '../entities/users/student.entity.js'; import { getStudentRepository } from '../data/repositories.js'; - -export interface StudentDTO { - id: string; - username: string; - firstName: string; - lastName: string; - endpoints?: { - classes: string; - questions: string; - invitations: string; - groups: string; - }; -} +import { StudentDTO } from 'dwengo-1-common/src/interfaces/student'; export function mapToStudentDTO(student: Student): StudentDTO { return { diff --git a/backend/src/services/classes.ts b/backend/src/services/classes.ts index ecc4b43e..c8d9f6ce 100644 --- a/backend/src/services/classes.ts +++ b/backend/src/services/classes.ts @@ -1,10 +1,11 @@ import { getClassRepository, getStudentRepository, getTeacherInvitationRepository, getTeacherRepository } from '../data/repositories.js'; import { mapToClassDTO } from '../interfaces/class.js'; -import { mapToStudentDTO, StudentDTO } from '../interfaces/student.js'; +import { mapToStudentDTO } from '../interfaces/student.js'; import { mapToTeacherInvitationDTO, mapToTeacherInvitationDTOIds } from '../interfaces/teacher-invitation.js'; import { getLogger } from '../logging/initalize.js'; import { ClassDTO } from 'dwengo-1-common/src/interfaces/class'; import { TeacherInvitationDTO } from 'dwengo-1-common/src/interfaces/teacher-invitation'; +import { StudentDTO } from 'dwengo-1-common/src/interfaces/student'; const logger = getLogger(); diff --git a/backend/src/services/students.ts b/backend/src/services/students.ts index f8d92486..9c14d749 100644 --- a/backend/src/services/students.ts +++ b/backend/src/services/students.ts @@ -1,13 +1,14 @@ import { getClassRepository, getGroupRepository, getStudentRepository, getSubmissionRepository } from '../data/repositories.js'; import { mapToClassDTO } from '../interfaces/class.js'; import { mapToGroupDTO, mapToGroupDTOId } from '../interfaces/group.js'; -import { mapToStudent, mapToStudentDTO, StudentDTO } from '../interfaces/student.js'; +import { mapToStudent, mapToStudentDTO } from '../interfaces/student.js'; import { mapToSubmissionDTO, mapToSubmissionDTOId } from '../interfaces/submission.js'; import { getAllAssignments } from './assignments.js'; import { AssignmentDTO } from 'dwengo-1-common/src/interfaces/assignment'; import { ClassDTO } from 'dwengo-1-common/src/interfaces/class'; import { GroupDTO } from 'dwengo-1-common/src/interfaces/group'; import { SubmissionDTO, SubmissionDTOId } from 'dwengo-1-common/src/interfaces/submission'; +import { StudentDTO } from 'dwengo-1-common/src/interfaces/student'; export async function getAllStudents(full: boolean): Promise { const studentRepository = getStudentRepository(); diff --git a/backend/src/services/teachers.ts b/backend/src/services/teachers.ts index 9589d0ba..3b2a5bbb 100644 --- a/backend/src/services/teachers.ts +++ b/backend/src/services/teachers.ts @@ -1,11 +1,11 @@ import { getClassRepository, getLearningObjectRepository, getQuestionRepository, getTeacherRepository } from '../data/repositories.js'; import { mapToClassDTO } from '../interfaces/class.js'; import { getClassStudents } from './classes.js'; -import { StudentDTO } from '../interfaces/student.js'; import { mapToQuestionDTO, mapToQuestionId, QuestionDTO, QuestionId } from '../interfaces/question.js'; import { mapToTeacher, mapToTeacherDTO } from '../interfaces/teacher.js'; import { ClassDTO } from 'dwengo-1-common/src/interfaces/class'; import { TeacherDTO } from 'dwengo-1-common/src/interfaces/teacher'; +import { StudentDTO } from 'dwengo-1-common/src/interfaces/student'; export async function getAllTeachers(full: boolean): Promise { const teacherRepository = getTeacherRepository(); diff --git a/common/src/interfaces/student.d.ts b/common/src/interfaces/student.d.ts new file mode 100644 index 00000000..cb13d3c2 --- /dev/null +++ b/common/src/interfaces/student.d.ts @@ -0,0 +1,12 @@ +export interface StudentDTO { + id: string; + username: string; + firstName: string; + lastName: string; + endpoints?: { + classes: string; + questions: string; + invitations: string; + groups: string; + }; +} From 70a31a292c72233a86e62d4abb5e6cae61b0874e Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Mon, 31 Mar 2025 21:49:58 +0200 Subject: [PATCH 11/19] refactor(common): Question --- backend/src/controllers/questions.ts | 2 +- backend/src/interfaces/question.ts | 16 +--------------- backend/src/services/questions.ts | 3 ++- backend/src/services/teachers.ts | 3 ++- common/src/interfaces/answer.d.ts | 2 +- common/src/interfaces/question.d.ts | 14 ++++++++++++++ 6 files changed, 21 insertions(+), 19 deletions(-) create mode 100644 common/src/interfaces/question.d.ts diff --git a/backend/src/controllers/questions.ts b/backend/src/controllers/questions.ts index 00a51329..0f0604b2 100644 --- a/backend/src/controllers/questions.ts +++ b/backend/src/controllers/questions.ts @@ -1,9 +1,9 @@ import { Request, Response } from 'express'; import { createQuestion, deleteQuestion, getAllQuestions, getAnswersByQuestion, getQuestion } from '../services/questions.js'; -import { QuestionDTO, QuestionId } from '../interfaces/question.js'; import { FALLBACK_LANG, FALLBACK_SEQ_NUM } from '../config.js'; import { LearningObjectIdentifier } from '../entities/content/learning-object-identifier.js'; import { Language } from '../entities/content/language.js'; +import { QuestionDTO, QuestionId } from 'dwengo-1-common/src/interfaces/question'; function getObjectId(req: Request, res: Response): LearningObjectIdentifier | null { const { hruid, version } = req.params; diff --git a/backend/src/interfaces/question.ts b/backend/src/interfaces/question.ts index 93019dae..86cd6523 100644 --- a/backend/src/interfaces/question.ts +++ b/backend/src/interfaces/question.ts @@ -1,15 +1,6 @@ import { Question } from '../entities/questions/question.entity.js'; -import { LearningObjectIdentifier } from '../entities/content/learning-object-identifier.js'; import { mapToStudentDTO } from './student.js'; -import { StudentDTO } from 'dwengo-1-common/src/interfaces/student'; - -export interface QuestionDTO { - learningObjectIdentifier: LearningObjectIdentifier; - sequenceNumber?: number; - author: StudentDTO; - timestamp?: string; - content: string; -} +import { QuestionDTO, QuestionId } from 'dwengo-1-common/src/interfaces/question'; /** * Convert a Question entity to a DTO format. @@ -30,11 +21,6 @@ export function mapToQuestionDTO(question: Question): QuestionDTO { }; } -export interface QuestionId { - learningObjectIdentifier: LearningObjectIdentifier; - sequenceNumber: number; -} - export function mapToQuestionId(question: QuestionDTO): QuestionId { return { learningObjectIdentifier: question.learningObjectIdentifier, diff --git a/backend/src/services/questions.ts b/backend/src/services/questions.ts index 0e52440f..ed61902e 100644 --- a/backend/src/services/questions.ts +++ b/backend/src/services/questions.ts @@ -1,5 +1,5 @@ import { getAnswerRepository, getQuestionRepository } from '../data/repositories.js'; -import { mapToQuestionDTO, mapToQuestionId, QuestionDTO, QuestionId } from '../interfaces/question.js'; +import { mapToQuestionDTO, mapToQuestionId } from '../interfaces/question.js'; import { Question } from '../entities/questions/question.entity.js'; import { Answer } from '../entities/questions/answer.entity.js'; import { mapToAnswerDTO, mapToAnswerId } from '../interfaces/answer.js'; @@ -8,6 +8,7 @@ import { LearningObjectIdentifier } from '../entities/content/learning-object-id import { mapToUser } from '../interfaces/user.js'; import { Student } from '../entities/users/student.entity.js'; import { mapToStudent } from '../interfaces/student.js'; +import { QuestionDTO, QuestionId } from 'dwengo-1-common/src/interfaces/question'; export async function getAllQuestions(id: LearningObjectIdentifier, full: boolean): Promise { const questionRepository: QuestionRepository = getQuestionRepository(); diff --git a/backend/src/services/teachers.ts b/backend/src/services/teachers.ts index 3b2a5bbb..aa6ce2d8 100644 --- a/backend/src/services/teachers.ts +++ b/backend/src/services/teachers.ts @@ -1,11 +1,12 @@ import { getClassRepository, getLearningObjectRepository, getQuestionRepository, getTeacherRepository } from '../data/repositories.js'; import { mapToClassDTO } from '../interfaces/class.js'; import { getClassStudents } from './classes.js'; -import { mapToQuestionDTO, mapToQuestionId, QuestionDTO, QuestionId } from '../interfaces/question.js'; +import { mapToQuestionDTO, mapToQuestionId } from '../interfaces/question.js'; import { mapToTeacher, mapToTeacherDTO } from '../interfaces/teacher.js'; import { ClassDTO } from 'dwengo-1-common/src/interfaces/class'; import { TeacherDTO } from 'dwengo-1-common/src/interfaces/teacher'; import { StudentDTO } from 'dwengo-1-common/src/interfaces/student'; +import { QuestionDTO, QuestionId } from 'dwengo-1-common/src/interfaces/question'; export async function getAllTeachers(full: boolean): Promise { const teacherRepository = getTeacherRepository(); diff --git a/common/src/interfaces/answer.d.ts b/common/src/interfaces/answer.d.ts index b8fc9b55..d2faf87d 100644 --- a/common/src/interfaces/answer.d.ts +++ b/common/src/interfaces/answer.d.ts @@ -1,5 +1,5 @@ -import { QuestionDTO } from 'dwengo-1-backend/src/interfaces/question.js'; import { UserDTO } from './user'; +import { QuestionDTO } from './question'; export interface AnswerDTO { author: UserDTO; diff --git a/common/src/interfaces/question.d.ts b/common/src/interfaces/question.d.ts new file mode 100644 index 00000000..2b2a263c --- /dev/null +++ b/common/src/interfaces/question.d.ts @@ -0,0 +1,14 @@ +import { StudentDTO } from './student'; + +export interface QuestionDTO { + learningObjectIdentifier: LearningObjectIdentifier; + sequenceNumber?: number; + author: StudentDTO; + timestamp?: string; + content: string; +} + +export interface QuestionId { + learningObjectIdentifier: LearningObjectIdentifier; + sequenceNumber: number; +} From 5a908620989f462afd227728a2f12a33925994c4 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Mon, 31 Mar 2025 21:55:34 +0200 Subject: [PATCH 12/19] refactor(common): Learning content --- backend/src/controllers/learning-objects.ts | 2 +- backend/src/services/learning-objects.ts | 8 +++++++- .../src/services/learning-objects/attachment-service.ts | 3 ++- .../learning-objects/database-learning-object-provider.ts | 2 +- .../dwengo-api-learning-object-provider.ts | 8 ++++---- .../services/learning-objects/learning-object-provider.ts | 2 +- .../services/learning-objects/learning-object-service.ts | 2 +- .../processing/markdown/dwengo-marked-renderer.ts | 2 +- .../learning-objects/processing/processing-service.ts | 2 +- .../learning-paths/database-learning-path-provider.ts | 8 +++++++- .../learning-paths/dwengo-api-learning-path-provider.ts | 2 +- .../src/services/learning-paths/learning-path-provider.ts | 2 +- .../src/services/learning-paths/learning-path-service.ts | 2 +- backend/src/util/links.ts | 2 +- .../database-learning-object-provider.test.ts | 2 +- .../learning-objects/learning-object-service.test.ts | 2 +- .../learning-path/database-learning-path-provider.test.ts | 3 ++- backend/tests/test-utils/expectations.ts | 2 +- .../src/interfaces/learning-content.d.ts | 2 +- 19 files changed, 36 insertions(+), 22 deletions(-) rename backend/src/interfaces/learning-content.ts => common/src/interfaces/learning-content.d.ts (97%) diff --git a/backend/src/controllers/learning-objects.ts b/backend/src/controllers/learning-objects.ts index 53eb1ded..71cac105 100644 --- a/backend/src/controllers/learning-objects.ts +++ b/backend/src/controllers/learning-objects.ts @@ -1,12 +1,12 @@ import { Request, Response } from 'express'; import { FALLBACK_LANG } from '../config.js'; -import { FilteredLearningObject, LearningObjectIdentifier, LearningPathIdentifier } from '../interfaces/learning-content.js'; import learningObjectService from '../services/learning-objects/learning-object-service.js'; import { EnvVars, getEnvVar } from '../util/envvars.js'; import { Language } from '../entities/content/language.js'; import attachmentService from '../services/learning-objects/attachment-service.js'; import { NotFoundError } from '@mikro-orm/core'; import { BadRequestException } from '../exceptions/bad-request-exception.js'; +import { FilteredLearningObject, LearningObjectIdentifier, LearningPathIdentifier } from 'dwengo-1-common/src/interfaces/learning-content'; function getLearningObjectIdentifierFromRequest(req: Request): LearningObjectIdentifier { if (!req.params.hruid) { diff --git a/backend/src/services/learning-objects.ts b/backend/src/services/learning-objects.ts index faa77cb4..d5f435e4 100644 --- a/backend/src/services/learning-objects.ts +++ b/backend/src/services/learning-objects.ts @@ -1,6 +1,12 @@ import { DWENGO_API_BASE } from '../config.js'; import { fetchWithLogging } from '../util/api-helper.js'; -import { FilteredLearningObject, LearningObjectMetadata, LearningObjectNode, LearningPathResponse } from '../interfaces/learning-content.js'; + +import { + FilteredLearningObject, + LearningObjectMetadata, + LearningObjectNode, + LearningPathResponse, +} from 'dwengo-1-common/src/interfaces/learning-content'; function filterData(data: LearningObjectMetadata, htmlUrl: string): FilteredLearningObject { return { diff --git a/backend/src/services/learning-objects/attachment-service.ts b/backend/src/services/learning-objects/attachment-service.ts index aacc7187..55dcc0e5 100644 --- a/backend/src/services/learning-objects/attachment-service.ts +++ b/backend/src/services/learning-objects/attachment-service.ts @@ -1,6 +1,7 @@ import { getAttachmentRepository } from '../../data/repositories.js'; import { Attachment } from '../../entities/content/attachment.entity.js'; -import { LearningObjectIdentifier } from '../../interfaces/learning-content.js'; + +import { LearningObjectIdentifier } from 'dwengo-1-common/src/interfaces/learning-content'; const attachmentService = { getAttachment(learningObjectId: LearningObjectIdentifier, attachmentName: string): Promise { diff --git a/backend/src/services/learning-objects/database-learning-object-provider.ts b/backend/src/services/learning-objects/database-learning-object-provider.ts index bab0b9b1..a0eb1850 100644 --- a/backend/src/services/learning-objects/database-learning-object-provider.ts +++ b/backend/src/services/learning-objects/database-learning-object-provider.ts @@ -1,5 +1,4 @@ import { LearningObjectProvider } from './learning-object-provider.js'; -import { FilteredLearningObject, LearningObjectIdentifier, LearningPathIdentifier } from '../../interfaces/learning-content.js'; import { getLearningObjectRepository, getLearningPathRepository } from '../../data/repositories.js'; import { Language } from '../../entities/content/language.js'; import { LearningObject } from '../../entities/content/learning-object.entity.js'; @@ -8,6 +7,7 @@ import processingService from './processing/processing-service.js'; import { NotFoundError } from '@mikro-orm/core'; import learningObjectService from './learning-object-service.js'; import { getLogger, Logger } from '../../logging/initalize.js'; +import { FilteredLearningObject, LearningObjectIdentifier, LearningPathIdentifier } from 'dwengo-1-common/src/interfaces/learning-content'; const logger: Logger = getLogger(); diff --git a/backend/src/services/learning-objects/dwengo-api-learning-object-provider.ts b/backend/src/services/learning-objects/dwengo-api-learning-object-provider.ts index dfee329d..1fd4ff69 100644 --- a/backend/src/services/learning-objects/dwengo-api-learning-object-provider.ts +++ b/backend/src/services/learning-objects/dwengo-api-learning-object-provider.ts @@ -1,5 +1,8 @@ import { DWENGO_API_BASE } from '../../config.js'; import { fetchWithLogging } from '../../util/api-helper.js'; +import dwengoApiLearningPathProvider from '../learning-paths/dwengo-api-learning-path-provider.js'; +import { LearningObjectProvider } from './learning-object-provider.js'; +import { getLogger, Logger } from '../../logging/initalize.js'; import { FilteredLearningObject, LearningObjectIdentifier, @@ -7,10 +10,7 @@ import { LearningObjectNode, LearningPathIdentifier, LearningPathResponse, -} from '../../interfaces/learning-content.js'; -import dwengoApiLearningPathProvider from '../learning-paths/dwengo-api-learning-path-provider.js'; -import { LearningObjectProvider } from './learning-object-provider.js'; -import { getLogger, Logger } from '../../logging/initalize.js'; +} from 'dwengo-1-common/src/interfaces/learning-content'; const logger: Logger = getLogger(); diff --git a/backend/src/services/learning-objects/learning-object-provider.ts b/backend/src/services/learning-objects/learning-object-provider.ts index 81b4d228..6ea7cbd1 100644 --- a/backend/src/services/learning-objects/learning-object-provider.ts +++ b/backend/src/services/learning-objects/learning-object-provider.ts @@ -1,4 +1,4 @@ -import { FilteredLearningObject, LearningObjectIdentifier, LearningPathIdentifier } from '../../interfaces/learning-content.js'; +import { FilteredLearningObject, LearningObjectIdentifier, LearningPathIdentifier } from 'dwengo-1-common/src/interfaces/learning-content'; export interface LearningObjectProvider { /** diff --git a/backend/src/services/learning-objects/learning-object-service.ts b/backend/src/services/learning-objects/learning-object-service.ts index 8289660b..983d7fc3 100644 --- a/backend/src/services/learning-objects/learning-object-service.ts +++ b/backend/src/services/learning-objects/learning-object-service.ts @@ -1,8 +1,8 @@ -import { FilteredLearningObject, LearningObjectIdentifier, LearningPathIdentifier } from '../../interfaces/learning-content.js'; import dwengoApiLearningObjectProvider from './dwengo-api-learning-object-provider.js'; import { LearningObjectProvider } from './learning-object-provider.js'; import { EnvVars, getEnvVar } from '../../util/envvars.js'; import databaseLearningObjectProvider from './database-learning-object-provider.js'; +import { FilteredLearningObject, LearningObjectIdentifier, LearningPathIdentifier } from 'dwengo-1-common/src/interfaces/learning-content'; function getProvider(id: LearningObjectIdentifier): LearningObjectProvider { if (id.hruid.startsWith(getEnvVar(EnvVars.UserContentPrefix))) { diff --git a/backend/src/services/learning-objects/processing/markdown/dwengo-marked-renderer.ts b/backend/src/services/learning-objects/processing/markdown/dwengo-marked-renderer.ts index d1c797be..3b9ad4e5 100644 --- a/backend/src/services/learning-objects/processing/markdown/dwengo-marked-renderer.ts +++ b/backend/src/services/learning-objects/processing/markdown/dwengo-marked-renderer.ts @@ -8,13 +8,13 @@ import InlineImageProcessor from '../image/inline-image-processor.js'; import * as marked from 'marked'; import { getUrlStringForLearningObjectHTML, isValidHttpUrl } from '../../../../util/links.js'; import { ProcessingError } from '../processing-error.js'; -import { LearningObjectIdentifier } from '../../../../interfaces/learning-content.js'; import { Language } from '../../../../entities/content/language.js'; import Image = marked.Tokens.Image; import Heading = marked.Tokens.Heading; import Link = marked.Tokens.Link; import RendererObject = marked.RendererObject; +import { LearningObjectIdentifier } from 'dwengo-1-common/src/interfaces/learning-content'; const prefixes = { learningObject: '@learning-object', diff --git a/backend/src/services/learning-objects/processing/processing-service.ts b/backend/src/services/learning-objects/processing/processing-service.ts index a6c662cc..ba83e83a 100644 --- a/backend/src/services/learning-objects/processing/processing-service.ts +++ b/backend/src/services/learning-objects/processing/processing-service.ts @@ -13,9 +13,9 @@ import GiftProcessor from './gift/gift-processor.js'; import { LearningObject } from '../../../entities/content/learning-object.entity.js'; import Processor from './processor.js'; import { DwengoContentType } from './content-type.js'; -import { LearningObjectIdentifier } from '../../../interfaces/learning-content.js'; import { Language } from '../../../entities/content/language.js'; import { replaceAsync } from '../../../util/async.js'; +import { LearningObjectIdentifier } from 'dwengo-1-common/src/interfaces/learning-content'; const EMBEDDED_LEARNING_OBJECT_PLACEHOLDER = //g; const LEARNING_OBJECT_DOES_NOT_EXIST = "
"; diff --git a/backend/src/services/learning-paths/database-learning-path-provider.ts b/backend/src/services/learning-paths/database-learning-path-provider.ts index bbcb6485..fe677fd1 100644 --- a/backend/src/services/learning-paths/database-learning-path-provider.ts +++ b/backend/src/services/learning-paths/database-learning-path-provider.ts @@ -1,5 +1,4 @@ import { LearningPathProvider } from './learning-path-provider.js'; -import { FilteredLearningObject, LearningObjectNode, LearningPath, LearningPathResponse, Transition } from '../../interfaces/learning-content.js'; import { LearningPath as LearningPathEntity } from '../../entities/content/learning-path.entity.js'; import { getLearningPathRepository } from '../../data/repositories.js'; import { Language } from '../../entities/content/language.js'; @@ -7,6 +6,13 @@ import learningObjectService from '../learning-objects/learning-object-service.j import { LearningPathNode } from '../../entities/content/learning-path-node.entity.js'; import { LearningPathTransition } from '../../entities/content/learning-path-transition.entity.js'; import { getLastSubmissionForCustomizationTarget, isTransitionPossible, PersonalizationTarget } from './learning-path-personalization-util.js'; +import { + FilteredLearningObject, + LearningObjectNode, + LearningPath, + LearningPathResponse, + Transition, +} from 'dwengo-1-common/src/interfaces/learning-content'; /** * Fetches the corresponding learning object for each of the nodes and creates a map that maps each node to its diff --git a/backend/src/services/learning-paths/dwengo-api-learning-path-provider.ts b/backend/src/services/learning-paths/dwengo-api-learning-path-provider.ts index a6093bb4..b7f03d35 100644 --- a/backend/src/services/learning-paths/dwengo-api-learning-path-provider.ts +++ b/backend/src/services/learning-paths/dwengo-api-learning-path-provider.ts @@ -1,8 +1,8 @@ import { fetchWithLogging } from '../../util/api-helper.js'; import { DWENGO_API_BASE } from '../../config.js'; -import { LearningPath, LearningPathResponse } from '../../interfaces/learning-content.js'; import { LearningPathProvider } from './learning-path-provider.js'; import { getLogger, Logger } from '../../logging/initalize.js'; +import { LearningPath, LearningPathResponse } from 'dwengo-1-common/src/interfaces/learning-content'; const logger: Logger = getLogger(); diff --git a/backend/src/services/learning-paths/learning-path-provider.ts b/backend/src/services/learning-paths/learning-path-provider.ts index 5e2a09df..a904296a 100644 --- a/backend/src/services/learning-paths/learning-path-provider.ts +++ b/backend/src/services/learning-paths/learning-path-provider.ts @@ -1,6 +1,6 @@ -import { LearningPath, LearningPathResponse } from '../../interfaces/learning-content.js'; import { Language } from '../../entities/content/language.js'; import { PersonalizationTarget } from './learning-path-personalization-util.js'; +import { LearningPath, LearningPathResponse } from 'dwengo-1-common/src/interfaces/learning-content'; /** * Generic interface for a service which provides access to learning paths from a data source. diff --git a/backend/src/services/learning-paths/learning-path-service.ts b/backend/src/services/learning-paths/learning-path-service.ts index 2fceb46c..c698e1bf 100644 --- a/backend/src/services/learning-paths/learning-path-service.ts +++ b/backend/src/services/learning-paths/learning-path-service.ts @@ -1,9 +1,9 @@ -import { LearningPath, LearningPathResponse } from '../../interfaces/learning-content.js'; import dwengoApiLearningPathProvider from './dwengo-api-learning-path-provider.js'; import databaseLearningPathProvider from './database-learning-path-provider.js'; import { EnvVars, getEnvVar } from '../../util/envvars.js'; import { Language } from '../../entities/content/language.js'; import { PersonalizationTarget } from './learning-path-personalization-util.js'; +import { LearningPath, LearningPathResponse } from 'dwengo-1-common/src/interfaces/learning-content'; const userContentPrefix = getEnvVar(EnvVars.UserContentPrefix); const allProviders = [dwengoApiLearningPathProvider, databaseLearningPathProvider]; diff --git a/backend/src/util/links.ts b/backend/src/util/links.ts index 73e27965..0107c9b0 100644 --- a/backend/src/util/links.ts +++ b/backend/src/util/links.ts @@ -1,4 +1,4 @@ -import { LearningObjectIdentifier } from '../interfaces/learning-content'; +import { LearningObjectIdentifier } from 'dwengo-1-common/src/interfaces/learning-content'; export function isValidHttpUrl(url: string): boolean { try { diff --git a/backend/tests/services/learning-objects/database-learning-object-provider.test.ts b/backend/tests/services/learning-objects/database-learning-object-provider.test.ts index 4750e4bd..a3317041 100644 --- a/backend/tests/services/learning-objects/database-learning-object-provider.test.ts +++ b/backend/tests/services/learning-objects/database-learning-object-provider.test.ts @@ -5,11 +5,11 @@ import example from '../../test-assets/learning-objects/pn-werkingnotebooks/pn-w import { LearningObject } from '../../../src/entities/content/learning-object.entity'; import databaseLearningObjectProvider from '../../../src/services/learning-objects/database-learning-object-provider'; import { expectToBeCorrectFilteredLearningObject } from '../../test-utils/expectations'; -import { FilteredLearningObject } from '../../../src/interfaces/learning-content'; import { Language } from '../../../src/entities/content/language'; import learningObjectExample from '../../test-assets/learning-objects/pn-werkingnotebooks/pn-werkingnotebooks-example'; import learningPathExample from '../../test-assets/learning-paths/pn-werking-example'; import { LearningPath } from '../../../src/entities/content/learning-path.entity'; +import {FilteredLearningObject} from "dwengo-1-common/src/interfaces/learning-content"; async function initExampleData(): Promise<{ learningObject: LearningObject; learningPath: LearningPath }> { const learningObjectRepo = getLearningObjectRepository(); diff --git a/backend/tests/services/learning-objects/learning-object-service.test.ts b/backend/tests/services/learning-objects/learning-object-service.test.ts index c06cca39..481dc702 100644 --- a/backend/tests/services/learning-objects/learning-object-service.test.ts +++ b/backend/tests/services/learning-objects/learning-object-service.test.ts @@ -4,11 +4,11 @@ import { LearningObject } from '../../../src/entities/content/learning-object.en import { getLearningObjectRepository, getLearningPathRepository } from '../../../src/data/repositories'; import learningObjectExample from '../../test-assets/learning-objects/pn-werkingnotebooks/pn-werkingnotebooks-example'; import learningObjectService from '../../../src/services/learning-objects/learning-object-service'; -import { LearningObjectIdentifier, LearningPathIdentifier } from '../../../src/interfaces/learning-content'; import { Language } from '../../../src/entities/content/language'; import { EnvVars, getEnvVar } from '../../../src/util/envvars'; import { LearningPath } from '../../../src/entities/content/learning-path.entity'; import learningPathExample from '../../test-assets/learning-paths/pn-werking-example'; +import {LearningObjectIdentifier, LearningPathIdentifier} from "dwengo-1-common/src/interfaces/learning-content"; const EXPECTED_DWENGO_LEARNING_OBJECT_TITLE = 'Werken met notebooks'; const DWENGO_TEST_LEARNING_OBJECT_ID: LearningObjectIdentifier = { diff --git a/backend/tests/services/learning-path/database-learning-path-provider.test.ts b/backend/tests/services/learning-path/database-learning-path-provider.test.ts index 04782df3..3493cb35 100644 --- a/backend/tests/services/learning-path/database-learning-path-provider.test.ts +++ b/backend/tests/services/learning-path/database-learning-path-provider.test.ts @@ -19,7 +19,8 @@ import { createConditionTestLearningPathAndLearningObjects, } from '../../test-assets/learning-paths/test-conditions-example.js'; import { Student } from '../../../src/entities/users/student.entity.js'; -import { LearningObjectNode, LearningPathResponse } from '../../../src/interfaces/learning-content.js'; + +import {LearningObjectNode, LearningPathResponse} from "dwengo-1-common/src/interfaces/learning-content"; async function initExampleData(): Promise<{ learningObject: LearningObject; learningPath: LearningPath }> { const learningObjectRepo = getLearningObjectRepository(); diff --git a/backend/tests/test-utils/expectations.ts b/backend/tests/test-utils/expectations.ts index 0fe63811..0dd4399c 100644 --- a/backend/tests/test-utils/expectations.ts +++ b/backend/tests/test-utils/expectations.ts @@ -1,8 +1,8 @@ import { AssertionError } from 'node:assert'; import { LearningObject } from '../../src/entities/content/learning-object.entity'; -import { FilteredLearningObject, LearningPath } from '../../src/interfaces/learning-content'; import { LearningPath as LearningPathEntity } from '../../src/entities/content/learning-path.entity'; import { expect } from 'vitest'; +import {FilteredLearningObject, LearningPath} from "dwengo-1-common/src/interfaces/learning-content"; // Ignored properties because they belang for example to the class, not to the entity itself. const IGNORE_PROPERTIES = ['parent']; diff --git a/backend/src/interfaces/learning-content.ts b/common/src/interfaces/learning-content.d.ts similarity index 97% rename from backend/src/interfaces/learning-content.ts rename to common/src/interfaces/learning-content.d.ts index 51474917..5debdff6 100644 --- a/backend/src/interfaces/learning-content.ts +++ b/common/src/interfaces/learning-content.d.ts @@ -1,4 +1,4 @@ -import { Language } from '../entities/content/language'; +import { Language } from 'dwengo-1-backend/src/entities/content/language.js' export interface Transition { default: boolean; From bef6c6f75b2cf3bb0ffd069e1640f2a563cb371e Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Mon, 31 Mar 2025 22:23:25 +0200 Subject: [PATCH 13/19] refactor(common): Language --- backend/src/controllers/learning-objects.ts | 2 +- backend/src/controllers/learning-paths.ts | 2 +- backend/src/controllers/questions.ts | 2 +- backend/src/controllers/submissions.ts | 2 +- backend/src/data/content/attachment-repository.ts | 2 +- .../src/data/content/learning-object-repository.ts | 1 - .../src/data/content/learning-path-repository.ts | 2 +- .../src/entities/assignments/assignment.entity.ts | 2 +- .../src/entities/assignments/submission.entity.ts | 2 +- .../entities/content/learning-object-identifier.ts | 2 +- .../src/entities/content/learning-object.entity.ts | 2 +- .../entities/content/learning-path-node.entity.ts | 2 +- .../src/entities/content/learning-path.entity.ts | 2 +- backend/src/entities/questions/question.entity.ts | 2 +- backend/src/interfaces/assignment.ts | 2 +- .../database-learning-object-provider.ts | 2 +- .../processing/markdown/dwengo-marked-renderer.ts | 2 +- .../processing/processing-service.ts | 2 +- .../database-learning-path-provider.ts | 2 +- .../learning-paths/learning-path-provider.ts | 2 +- .../learning-paths/learning-path-service.ts | 2 +- backend/src/services/submissions.ts | 4 ++-- backend/tests/data/assignments/submissions.test.ts | 2 +- backend/tests/data/content/attachments.test.ts | 2 +- .../tests/data/content/learning-objects.test.ts | 2 +- .../data/content/learning-path-repository.test.ts | 2 +- backend/tests/data/content/learning-paths.test.ts | 2 +- backend/tests/data/questions/answers.test.ts | 2 +- backend/tests/data/questions/questions.test.ts | 2 +- .../database-learning-object-provider.test.ts | 6 +++--- .../learning-object-service.test.ts | 14 ++++++++++---- .../database-learning-path-provider.test.ts | 10 +++++++--- .../learning-path/learning-path-service.test.ts | 2 +- .../dummy/dummy-learning-object-example.ts | 2 +- .../pn-werkingnotebooks-example.ts | 2 +- .../test-essay/test-essay-example.ts | 2 +- .../test-multiple-choice-example.ts | 2 +- .../learning-paths/learning-path-utils.ts | 2 +- .../learning-paths/pn-werking-example.ts | 2 +- .../learning-paths/test-conditions-example.ts | 2 +- backend/tests/test-utils/expectations.ts | 10 ++++++++-- .../assignments/assignments.testdata.ts | 2 +- .../test_assets/assignments/submission.testdata.ts | 2 +- .../content/learning-objects.testdata.ts | 2 +- .../test_assets/content/learning-paths.testdata.ts | 2 +- .../test_assets/questions/questions.testdata.ts | 2 +- common/src/interfaces/learning-content.d.ts | 2 +- .../content => common/src/util}/language.ts | 0 48 files changed, 71 insertions(+), 56 deletions(-) rename {backend/src/entities/content => common/src/util}/language.ts (100%) diff --git a/backend/src/controllers/learning-objects.ts b/backend/src/controllers/learning-objects.ts index 71cac105..706c02b9 100644 --- a/backend/src/controllers/learning-objects.ts +++ b/backend/src/controllers/learning-objects.ts @@ -2,11 +2,11 @@ import { Request, Response } from 'express'; import { FALLBACK_LANG } from '../config.js'; import learningObjectService from '../services/learning-objects/learning-object-service.js'; import { EnvVars, getEnvVar } from '../util/envvars.js'; -import { Language } from '../entities/content/language.js'; import attachmentService from '../services/learning-objects/attachment-service.js'; import { NotFoundError } from '@mikro-orm/core'; import { BadRequestException } from '../exceptions/bad-request-exception.js'; import { FilteredLearningObject, LearningObjectIdentifier, LearningPathIdentifier } from 'dwengo-1-common/src/interfaces/learning-content'; +import { Language } from 'dwengo-1-common/src/util/language.js'; function getLearningObjectIdentifierFromRequest(req: Request): LearningObjectIdentifier { if (!req.params.hruid) { diff --git a/backend/src/controllers/learning-paths.ts b/backend/src/controllers/learning-paths.ts index 04e44b59..23b77115 100644 --- a/backend/src/controllers/learning-paths.ts +++ b/backend/src/controllers/learning-paths.ts @@ -2,7 +2,6 @@ import { Request, Response } from 'express'; import { themes } from '../data/themes.js'; import { FALLBACK_LANG } from '../config.js'; import learningPathService from '../services/learning-paths/learning-path-service.js'; -import { Language } from '../entities/content/language.js'; import { PersonalizationTarget, personalizedForGroup, @@ -10,6 +9,7 @@ import { } from '../services/learning-paths/learning-path-personalization-util.js'; import { BadRequestException } from '../exceptions/bad-request-exception.js'; import { NotFoundException } from '../exceptions/not-found-exception.js'; +import { Language } from 'dwengo-1-common/src/util/language.js'; /** * Fetch learning paths based on query parameters. diff --git a/backend/src/controllers/questions.ts b/backend/src/controllers/questions.ts index 0f0604b2..2a31a124 100644 --- a/backend/src/controllers/questions.ts +++ b/backend/src/controllers/questions.ts @@ -2,8 +2,8 @@ import { Request, Response } from 'express'; import { createQuestion, deleteQuestion, getAllQuestions, getAnswersByQuestion, getQuestion } from '../services/questions.js'; import { FALLBACK_LANG, FALLBACK_SEQ_NUM } from '../config.js'; import { LearningObjectIdentifier } from '../entities/content/learning-object-identifier.js'; -import { Language } from '../entities/content/language.js'; import { QuestionDTO, QuestionId } from 'dwengo-1-common/src/interfaces/question'; +import { Language } from 'dwengo-1-common/src/util/language.js'; function getObjectId(req: Request, res: Response): LearningObjectIdentifier | null { const { hruid, version } = req.params; diff --git a/backend/src/controllers/submissions.ts b/backend/src/controllers/submissions.ts index 9ef2df6e..d466a49d 100644 --- a/backend/src/controllers/submissions.ts +++ b/backend/src/controllers/submissions.ts @@ -1,8 +1,8 @@ import { Request, Response } from 'express'; import { createSubmission, deleteSubmission, getSubmission } from '../services/submissions.js'; -import { Language, languageMap } from '../entities/content/language.js'; import { SubmissionDTO } from 'dwengo-1-common/src/interfaces/submission'; +import { Language, languageMap } from 'dwengo-1-common/src/util/language.js'; interface SubmissionParams { hruid: string; diff --git a/backend/src/data/content/attachment-repository.ts b/backend/src/data/content/attachment-repository.ts index 95c5ab1c..d71a8d6b 100644 --- a/backend/src/data/content/attachment-repository.ts +++ b/backend/src/data/content/attachment-repository.ts @@ -1,7 +1,7 @@ import { DwengoEntityRepository } from '../dwengo-entity-repository.js'; import { Attachment } from '../../entities/content/attachment.entity.js'; -import { Language } from '../../entities/content/language'; import { LearningObjectIdentifier } from '../../entities/content/learning-object-identifier'; +import { Language } from 'dwengo-1-common/src/util/language.js'; export class AttachmentRepository extends DwengoEntityRepository { public findByLearningObjectIdAndName(learningObjectId: LearningObjectIdentifier, name: string): Promise { diff --git a/backend/src/data/content/learning-object-repository.ts b/backend/src/data/content/learning-object-repository.ts index 49b4c536..996a53bd 100644 --- a/backend/src/data/content/learning-object-repository.ts +++ b/backend/src/data/content/learning-object-repository.ts @@ -1,7 +1,6 @@ import { DwengoEntityRepository } from '../dwengo-entity-repository.js'; import { LearningObject } from '../../entities/content/learning-object.entity.js'; import { LearningObjectIdentifier } from '../../entities/content/learning-object-identifier.js'; -import { Language } from '../../entities/content/language.js'; import { Teacher } from '../../entities/users/teacher.entity.js'; export class LearningObjectRepository extends DwengoEntityRepository { diff --git a/backend/src/data/content/learning-path-repository.ts b/backend/src/data/content/learning-path-repository.ts index a2f9b47e..59e4e282 100644 --- a/backend/src/data/content/learning-path-repository.ts +++ b/backend/src/data/content/learning-path-repository.ts @@ -1,6 +1,6 @@ import { DwengoEntityRepository } from '../dwengo-entity-repository.js'; import { LearningPath } from '../../entities/content/learning-path.entity.js'; -import { Language } from '../../entities/content/language.js'; +import { Language } from 'dwengo-1-common/src/util/language.js'; export class LearningPathRepository extends DwengoEntityRepository { public findByHruidAndLanguage(hruid: string, language: Language): Promise { diff --git a/backend/src/entities/assignments/assignment.entity.ts b/backend/src/entities/assignments/assignment.entity.ts index daa71ed6..59b71d67 100644 --- a/backend/src/entities/assignments/assignment.entity.ts +++ b/backend/src/entities/assignments/assignment.entity.ts @@ -1,8 +1,8 @@ import { Entity, Enum, ManyToOne, OneToMany, PrimaryKey, Property } from '@mikro-orm/core'; import { Class } from '../classes/class.entity.js'; import { Group } from './group.entity.js'; -import { Language } from '../content/language.js'; import { AssignmentRepository } from '../../data/assignments/assignment-repository.js'; +import { Language } from 'dwengo-1-common/src/util/language.js'; @Entity({ repository: () => AssignmentRepository, diff --git a/backend/src/entities/assignments/submission.entity.ts b/backend/src/entities/assignments/submission.entity.ts index fbaa2791..333595b7 100644 --- a/backend/src/entities/assignments/submission.entity.ts +++ b/backend/src/entities/assignments/submission.entity.ts @@ -1,8 +1,8 @@ import { Student } from '../users/student.entity.js'; import { Group } from './group.entity.js'; import { Entity, Enum, ManyToOne, PrimaryKey, Property } from '@mikro-orm/core'; -import { Language } from '../content/language.js'; import { SubmissionRepository } from '../../data/assignments/submission-repository.js'; +import { Language } from 'dwengo-1-common/src/util/language.js'; @Entity({ repository: () => SubmissionRepository }) export class Submission { diff --git a/backend/src/entities/content/learning-object-identifier.ts b/backend/src/entities/content/learning-object-identifier.ts index 3c020bd7..afc9b7d5 100644 --- a/backend/src/entities/content/learning-object-identifier.ts +++ b/backend/src/entities/content/learning-object-identifier.ts @@ -1,4 +1,4 @@ -import { Language } from './language.js'; +import { Language } from 'dwengo-1-common/src/util/language'; export class LearningObjectIdentifier { constructor( diff --git a/backend/src/entities/content/learning-object.entity.ts b/backend/src/entities/content/learning-object.entity.ts index 9eda22ba..b0e941c0 100644 --- a/backend/src/entities/content/learning-object.entity.ts +++ b/backend/src/entities/content/learning-object.entity.ts @@ -1,10 +1,10 @@ import { Embeddable, Embedded, Entity, Enum, ManyToMany, OneToMany, PrimaryKey, Property } from '@mikro-orm/core'; -import { Language } from './language.js'; import { Attachment } from './attachment.entity.js'; import { Teacher } from '../users/teacher.entity.js'; import { DwengoContentType } from '../../services/learning-objects/processing/content-type.js'; import { v4 } from 'uuid'; import { LearningObjectRepository } from '../../data/content/learning-object-repository.js'; +import { Language } from 'dwengo-1-common/src/util/language.js'; @Embeddable() export class EducationalGoal { diff --git a/backend/src/entities/content/learning-path-node.entity.ts b/backend/src/entities/content/learning-path-node.entity.ts index 03499270..129ff708 100644 --- a/backend/src/entities/content/learning-path-node.entity.ts +++ b/backend/src/entities/content/learning-path-node.entity.ts @@ -1,7 +1,7 @@ import { Entity, Enum, ManyToOne, OneToMany, PrimaryKey, Property, Rel } from '@mikro-orm/core'; -import { Language } from './language.js'; import { LearningPath } from './learning-path.entity.js'; import { LearningPathTransition } from './learning-path-transition.entity.js'; +import { Language } from 'dwengo-1-common/src/util/language.js'; @Entity() export class LearningPathNode { diff --git a/backend/src/entities/content/learning-path.entity.ts b/backend/src/entities/content/learning-path.entity.ts index 888cc0cf..f486d5b1 100644 --- a/backend/src/entities/content/learning-path.entity.ts +++ b/backend/src/entities/content/learning-path.entity.ts @@ -1,8 +1,8 @@ import { Entity, Enum, ManyToMany, OneToMany, PrimaryKey, Property } from '@mikro-orm/core'; -import { Language } from './language.js'; import { Teacher } from '../users/teacher.entity.js'; import { LearningPathRepository } from '../../data/content/learning-path-repository.js'; import { LearningPathNode } from './learning-path-node.entity.js'; +import { Language } from 'dwengo-1-common/src/util/language.js'; @Entity({ repository: () => LearningPathRepository }) export class LearningPath { diff --git a/backend/src/entities/questions/question.entity.ts b/backend/src/entities/questions/question.entity.ts index 058ba6b3..8f2bca53 100644 --- a/backend/src/entities/questions/question.entity.ts +++ b/backend/src/entities/questions/question.entity.ts @@ -1,7 +1,7 @@ import { Entity, Enum, ManyToOne, PrimaryKey, Property } from '@mikro-orm/core'; -import { Language } from '../content/language.js'; import { Student } from '../users/student.entity.js'; import { QuestionRepository } from '../../data/questions/question-repository.js'; +import { Language } from 'dwengo-1-common/src/util/language.js'; @Entity({ repository: () => QuestionRepository }) export class Question { diff --git a/backend/src/interfaces/assignment.ts b/backend/src/interfaces/assignment.ts index c437f155..e5f2a53d 100644 --- a/backend/src/interfaces/assignment.ts +++ b/backend/src/interfaces/assignment.ts @@ -1,7 +1,7 @@ +import { languageMap } from 'dwengo-1-common/src/util/language.js'; import { FALLBACK_LANG } from '../config.js'; import { Assignment } from '../entities/assignments/assignment.entity.js'; import { Class } from '../entities/classes/class.entity.js'; -import { languageMap } from '../entities/content/language.js'; import { AssignmentDTO } from 'dwengo-1-common/src/interfaces/assignment'; export function mapToAssignmentDTOId(assignment: Assignment): AssignmentDTO { diff --git a/backend/src/services/learning-objects/database-learning-object-provider.ts b/backend/src/services/learning-objects/database-learning-object-provider.ts index a0eb1850..a4cf886d 100644 --- a/backend/src/services/learning-objects/database-learning-object-provider.ts +++ b/backend/src/services/learning-objects/database-learning-object-provider.ts @@ -1,6 +1,5 @@ import { LearningObjectProvider } from './learning-object-provider.js'; import { getLearningObjectRepository, getLearningPathRepository } from '../../data/repositories.js'; -import { Language } from '../../entities/content/language.js'; import { LearningObject } from '../../entities/content/learning-object.entity.js'; import { getUrlStringForLearningObject } from '../../util/links.js'; import processingService from './processing/processing-service.js'; @@ -8,6 +7,7 @@ import { NotFoundError } from '@mikro-orm/core'; import learningObjectService from './learning-object-service.js'; import { getLogger, Logger } from '../../logging/initalize.js'; import { FilteredLearningObject, LearningObjectIdentifier, LearningPathIdentifier } from 'dwengo-1-common/src/interfaces/learning-content'; +import { Language } from 'dwengo-1-common/src/util/language.js'; const logger: Logger = getLogger(); diff --git a/backend/src/services/learning-objects/processing/markdown/dwengo-marked-renderer.ts b/backend/src/services/learning-objects/processing/markdown/dwengo-marked-renderer.ts index 3b9ad4e5..c2d04bd5 100644 --- a/backend/src/services/learning-objects/processing/markdown/dwengo-marked-renderer.ts +++ b/backend/src/services/learning-objects/processing/markdown/dwengo-marked-renderer.ts @@ -8,13 +8,13 @@ import InlineImageProcessor from '../image/inline-image-processor.js'; import * as marked from 'marked'; import { getUrlStringForLearningObjectHTML, isValidHttpUrl } from '../../../../util/links.js'; import { ProcessingError } from '../processing-error.js'; -import { Language } from '../../../../entities/content/language.js'; import Image = marked.Tokens.Image; import Heading = marked.Tokens.Heading; import Link = marked.Tokens.Link; import RendererObject = marked.RendererObject; import { LearningObjectIdentifier } from 'dwengo-1-common/src/interfaces/learning-content'; +import { Language } from 'dwengo-1-common/src/util/language.js'; const prefixes = { learningObject: '@learning-object', diff --git a/backend/src/services/learning-objects/processing/processing-service.ts b/backend/src/services/learning-objects/processing/processing-service.ts index ba83e83a..d206f788 100644 --- a/backend/src/services/learning-objects/processing/processing-service.ts +++ b/backend/src/services/learning-objects/processing/processing-service.ts @@ -13,9 +13,9 @@ import GiftProcessor from './gift/gift-processor.js'; import { LearningObject } from '../../../entities/content/learning-object.entity.js'; import Processor from './processor.js'; import { DwengoContentType } from './content-type.js'; -import { Language } from '../../../entities/content/language.js'; import { replaceAsync } from '../../../util/async.js'; import { LearningObjectIdentifier } from 'dwengo-1-common/src/interfaces/learning-content'; +import { Language } from 'dwengo-1-common/src/util/language.js'; const EMBEDDED_LEARNING_OBJECT_PLACEHOLDER = //g; const LEARNING_OBJECT_DOES_NOT_EXIST = "
"; diff --git a/backend/src/services/learning-paths/database-learning-path-provider.ts b/backend/src/services/learning-paths/database-learning-path-provider.ts index fe677fd1..cef2eb90 100644 --- a/backend/src/services/learning-paths/database-learning-path-provider.ts +++ b/backend/src/services/learning-paths/database-learning-path-provider.ts @@ -1,7 +1,6 @@ import { LearningPathProvider } from './learning-path-provider.js'; import { LearningPath as LearningPathEntity } from '../../entities/content/learning-path.entity.js'; import { getLearningPathRepository } from '../../data/repositories.js'; -import { Language } from '../../entities/content/language.js'; import learningObjectService from '../learning-objects/learning-object-service.js'; import { LearningPathNode } from '../../entities/content/learning-path-node.entity.js'; import { LearningPathTransition } from '../../entities/content/learning-path-transition.entity.js'; @@ -13,6 +12,7 @@ import { LearningPathResponse, Transition, } from 'dwengo-1-common/src/interfaces/learning-content'; +import { Language } from 'dwengo-1-common/src/util/language.js'; /** * Fetches the corresponding learning object for each of the nodes and creates a map that maps each node to its diff --git a/backend/src/services/learning-paths/learning-path-provider.ts b/backend/src/services/learning-paths/learning-path-provider.ts index a904296a..99a05ab0 100644 --- a/backend/src/services/learning-paths/learning-path-provider.ts +++ b/backend/src/services/learning-paths/learning-path-provider.ts @@ -1,4 +1,4 @@ -import { Language } from '../../entities/content/language.js'; +import { Language } from 'dwengo-1-common/src/util/language.js'; import { PersonalizationTarget } from './learning-path-personalization-util.js'; import { LearningPath, LearningPathResponse } from 'dwengo-1-common/src/interfaces/learning-content'; diff --git a/backend/src/services/learning-paths/learning-path-service.ts b/backend/src/services/learning-paths/learning-path-service.ts index c698e1bf..a82880dd 100644 --- a/backend/src/services/learning-paths/learning-path-service.ts +++ b/backend/src/services/learning-paths/learning-path-service.ts @@ -1,9 +1,9 @@ import dwengoApiLearningPathProvider from './dwengo-api-learning-path-provider.js'; import databaseLearningPathProvider from './database-learning-path-provider.js'; import { EnvVars, getEnvVar } from '../../util/envvars.js'; -import { Language } from '../../entities/content/language.js'; import { PersonalizationTarget } from './learning-path-personalization-util.js'; import { LearningPath, LearningPathResponse } from 'dwengo-1-common/src/interfaces/learning-content'; +import { Language } from 'dwengo-1-common/src/util/language.js'; const userContentPrefix = getEnvVar(EnvVars.UserContentPrefix); const allProviders = [dwengoApiLearningPathProvider, databaseLearningPathProvider]; diff --git a/backend/src/services/submissions.ts b/backend/src/services/submissions.ts index 0fa9811d..f3bf38ce 100644 --- a/backend/src/services/submissions.ts +++ b/backend/src/services/submissions.ts @@ -1,5 +1,5 @@ -import { getGroupRepository, getSubmissionRepository } from '../data/repositories.js'; -import { Language } from '../entities/content/language.js'; +import { Language } from 'dwengo-1-common/src/util/language.js'; +import { getSubmissionRepository } from '../data/repositories.js'; import { LearningObjectIdentifier } from '../entities/content/learning-object-identifier.js'; import { mapToSubmission, mapToSubmissionDTO } from '../interfaces/submission.js'; import { SubmissionDTO } from 'dwengo-1-common/src/interfaces/submission'; diff --git a/backend/tests/data/assignments/submissions.test.ts b/backend/tests/data/assignments/submissions.test.ts index cd212b77..d2595973 100644 --- a/backend/tests/data/assignments/submissions.test.ts +++ b/backend/tests/data/assignments/submissions.test.ts @@ -9,11 +9,11 @@ import { getSubmissionRepository, } from '../../../src/data/repositories'; import { LearningObjectIdentifier } from '../../../src/entities/content/learning-object-identifier'; -import { Language } from '../../../src/entities/content/language'; import { StudentRepository } from '../../../src/data/users/student-repository'; import { GroupRepository } from '../../../src/data/assignments/group-repository'; import { AssignmentRepository } from '../../../src/data/assignments/assignment-repository'; import { ClassRepository } from '../../../src/data/classes/class-repository'; +import { Language } from 'dwengo-1-common/src/util/language'; describe('SubmissionRepository', () => { let submissionRepository: SubmissionRepository; diff --git a/backend/tests/data/content/attachments.test.ts b/backend/tests/data/content/attachments.test.ts index 94e132a9..42adc507 100644 --- a/backend/tests/data/content/attachments.test.ts +++ b/backend/tests/data/content/attachments.test.ts @@ -4,7 +4,7 @@ import { getAttachmentRepository, getLearningObjectRepository } from '../../../s import { AttachmentRepository } from '../../../src/data/content/attachment-repository.js'; import { LearningObjectRepository } from '../../../src/data/content/learning-object-repository.js'; import { LearningObjectIdentifier } from '../../../src/entities/content/learning-object-identifier.js'; -import { Language } from '../../../src/entities/content/language.js'; +import { Language } from 'dwengo-1-common/src/util/language.js'; describe('AttachmentRepository', () => { let attachmentRepository: AttachmentRepository; diff --git a/backend/tests/data/content/learning-objects.test.ts b/backend/tests/data/content/learning-objects.test.ts index 712f75c9..c996f7cd 100644 --- a/backend/tests/data/content/learning-objects.test.ts +++ b/backend/tests/data/content/learning-objects.test.ts @@ -3,7 +3,7 @@ import { LearningObjectRepository } from '../../../src/data/content/learning-obj import { getLearningObjectRepository } from '../../../src/data/repositories'; import { setupTestApp } from '../../setup-tests'; import { LearningObjectIdentifier } from '../../../src/entities/content/learning-object-identifier'; -import { Language } from '../../../src/entities/content/language'; +import { Language } from 'dwengo-1-common/src/util/language'; describe('LearningObjectRepository', () => { let learningObjectRepository: LearningObjectRepository; diff --git a/backend/tests/data/content/learning-path-repository.test.ts b/backend/tests/data/content/learning-path-repository.test.ts index 8dbff3c1..1b03b761 100644 --- a/backend/tests/data/content/learning-path-repository.test.ts +++ b/backend/tests/data/content/learning-path-repository.test.ts @@ -5,7 +5,7 @@ import { LearningPathRepository } from '../../../src/data/content/learning-path- import example from '../../test-assets/learning-paths/pn-werking-example.js'; import { LearningPath } from '../../../src/entities/content/learning-path.entity.js'; import { expectToBeCorrectEntity } from '../../test-utils/expectations.js'; -import { Language } from '../../../src/entities/content/language.js'; +import { Language } from 'dwengo-1-common/src/util/language'; function expectToHaveFoundPrecisely(expected: LearningPath, result: LearningPath[]): void { expect(result).toHaveProperty('length'); diff --git a/backend/tests/data/content/learning-paths.test.ts b/backend/tests/data/content/learning-paths.test.ts index 01fd20e5..37801e1a 100644 --- a/backend/tests/data/content/learning-paths.test.ts +++ b/backend/tests/data/content/learning-paths.test.ts @@ -2,7 +2,7 @@ import { beforeAll, describe, expect, it } from 'vitest'; import { getLearningPathRepository } from '../../../src/data/repositories'; import { LearningPathRepository } from '../../../src/data/content/learning-path-repository'; import { setupTestApp } from '../../setup-tests'; -import { Language } from '../../../src/entities/content/language'; +import { Language } from 'dwengo-1-common/src/util/language'; describe('LearningPathRepository', () => { let learningPathRepository: LearningPathRepository; diff --git a/backend/tests/data/questions/answers.test.ts b/backend/tests/data/questions/answers.test.ts index bcc62cf6..1ac7612e 100644 --- a/backend/tests/data/questions/answers.test.ts +++ b/backend/tests/data/questions/answers.test.ts @@ -1,10 +1,10 @@ import { beforeAll, describe, expect, it } from 'vitest'; +import { Language } from 'dwengo-1-common/src/util/language'; import { setupTestApp } from '../../setup-tests'; import { AnswerRepository } from '../../../src/data/questions/answer-repository'; import { getAnswerRepository, getQuestionRepository, getTeacherRepository } from '../../../src/data/repositories'; import { QuestionRepository } from '../../../src/data/questions/question-repository'; import { LearningObjectIdentifier } from '../../../src/entities/content/learning-object-identifier'; -import { Language } from '../../../src/entities/content/language'; import { TeacherRepository } from '../../../src/data/users/teacher-repository'; describe('AnswerRepository', () => { diff --git a/backend/tests/data/questions/questions.test.ts b/backend/tests/data/questions/questions.test.ts index 7b408df4..b3a43567 100644 --- a/backend/tests/data/questions/questions.test.ts +++ b/backend/tests/data/questions/questions.test.ts @@ -1,11 +1,11 @@ import { beforeAll, describe, expect, it } from 'vitest'; +import { Language } from 'dwengo-1-common/src/util/language'; import { setupTestApp } from '../../setup-tests'; import { QuestionRepository } from '../../../src/data/questions/question-repository'; import { getLearningObjectRepository, getQuestionRepository, getStudentRepository } from '../../../src/data/repositories'; import { StudentRepository } from '../../../src/data/users/student-repository'; import { LearningObjectRepository } from '../../../src/data/content/learning-object-repository'; import { LearningObjectIdentifier } from '../../../src/entities/content/learning-object-identifier'; -import { Language } from '../../../src/entities/content/language'; describe('QuestionRepository', () => { let questionRepository: QuestionRepository; diff --git a/backend/tests/services/learning-objects/database-learning-object-provider.test.ts b/backend/tests/services/learning-objects/database-learning-object-provider.test.ts index a3317041..381bd4e2 100644 --- a/backend/tests/services/learning-objects/database-learning-object-provider.test.ts +++ b/backend/tests/services/learning-objects/database-learning-object-provider.test.ts @@ -1,15 +1,15 @@ import { beforeAll, describe, expect, it } from 'vitest'; +import { Language } from 'dwengo-1-common/src/util/language'; import { setupTestApp } from '../../setup-tests'; import { getLearningObjectRepository, getLearningPathRepository } from '../../../src/data/repositories'; import example from '../../test-assets/learning-objects/pn-werkingnotebooks/pn-werkingnotebooks-example'; +import learningObjectExample from '../../test-assets/learning-objects/pn-werkingnotebooks/pn-werkingnotebooks-example'; import { LearningObject } from '../../../src/entities/content/learning-object.entity'; import databaseLearningObjectProvider from '../../../src/services/learning-objects/database-learning-object-provider'; import { expectToBeCorrectFilteredLearningObject } from '../../test-utils/expectations'; -import { Language } from '../../../src/entities/content/language'; -import learningObjectExample from '../../test-assets/learning-objects/pn-werkingnotebooks/pn-werkingnotebooks-example'; import learningPathExample from '../../test-assets/learning-paths/pn-werking-example'; import { LearningPath } from '../../../src/entities/content/learning-path.entity'; -import {FilteredLearningObject} from "dwengo-1-common/src/interfaces/learning-content"; +import { FilteredLearningObject } from 'dwengo-1-common/src/interfaces/learning-content'; async function initExampleData(): Promise<{ learningObject: LearningObject; learningPath: LearningPath }> { const learningObjectRepo = getLearningObjectRepository(); diff --git a/backend/tests/services/learning-objects/learning-object-service.test.ts b/backend/tests/services/learning-objects/learning-object-service.test.ts index 481dc702..9d2d87a6 100644 --- a/backend/tests/services/learning-objects/learning-object-service.test.ts +++ b/backend/tests/services/learning-objects/learning-object-service.test.ts @@ -1,14 +1,14 @@ import { beforeAll, describe, expect, it } from 'vitest'; +import { Language } from 'dwengo-1-common/src/util/language'; import { setupTestApp } from '../../setup-tests'; import { LearningObject } from '../../../src/entities/content/learning-object.entity'; import { getLearningObjectRepository, getLearningPathRepository } from '../../../src/data/repositories'; import learningObjectExample from '../../test-assets/learning-objects/pn-werkingnotebooks/pn-werkingnotebooks-example'; import learningObjectService from '../../../src/services/learning-objects/learning-object-service'; -import { Language } from '../../../src/entities/content/language'; import { EnvVars, getEnvVar } from '../../../src/util/envvars'; import { LearningPath } from '../../../src/entities/content/learning-path.entity'; import learningPathExample from '../../test-assets/learning-paths/pn-werking-example'; -import {LearningObjectIdentifier, LearningPathIdentifier} from "dwengo-1-common/src/interfaces/learning-content"; +import { LearningObjectIdentifier, LearningPathIdentifier } from 'dwengo-1-common/src/interfaces/learning-content'; const EXPECTED_DWENGO_LEARNING_OBJECT_TITLE = 'Werken met notebooks'; const DWENGO_TEST_LEARNING_OBJECT_ID: LearningObjectIdentifier = { @@ -105,7 +105,10 @@ describe('LearningObjectService', () => { expect(new Set(result.map((it) => it.key))).toEqual(DWENGO_TEST_LEARNING_PATH_HRUIDS); }); it('returns an empty list when queried with a non-existing learning path id', async () => { - const result = await learningObjectService.getLearningObjectsFromPath({ hruid: 'non_existing', language: Language.Dutch }); + const result = await learningObjectService.getLearningObjectsFromPath({ + hruid: 'non_existing', + language: Language.Dutch, + }); expect(result).toEqual([]); }); }); @@ -120,7 +123,10 @@ describe('LearningObjectService', () => { expect(new Set(result)).toEqual(DWENGO_TEST_LEARNING_PATH_HRUIDS); }); it('returns an empty list when queried with a non-existing learning path id', async () => { - const result = await learningObjectService.getLearningObjectIdsFromPath({ hruid: 'non_existing', language: Language.Dutch }); + const result = await learningObjectService.getLearningObjectIdsFromPath({ + hruid: 'non_existing', + language: Language.Dutch, + }); expect(result).toEqual([]); }); }); diff --git a/backend/tests/services/learning-path/database-learning-path-provider.test.ts b/backend/tests/services/learning-path/database-learning-path-provider.test.ts index 3493cb35..80117520 100644 --- a/backend/tests/services/learning-path/database-learning-path-provider.test.ts +++ b/backend/tests/services/learning-path/database-learning-path-provider.test.ts @@ -1,4 +1,5 @@ import { beforeAll, describe, expect, it } from 'vitest'; +import { Language } from 'dwengo-1-common/src/util/language'; import { LearningObject } from '../../../src/entities/content/learning-object.entity.js'; import { setupTestApp } from '../../setup-tests.js'; import { LearningPath } from '../../../src/entities/content/learning-path.entity.js'; @@ -13,14 +14,13 @@ import learningPathExample from '../../test-assets/learning-paths/pn-werking-exa import databaseLearningPathProvider from '../../../src/services/learning-paths/database-learning-path-provider.js'; import { expectToBeCorrectLearningPath } from '../../test-utils/expectations.js'; import learningObjectService from '../../../src/services/learning-objects/learning-object-service.js'; -import { Language } from '../../../src/entities/content/language.js'; import { ConditionTestLearningPathAndLearningObjects, createConditionTestLearningPathAndLearningObjects, } from '../../test-assets/learning-paths/test-conditions-example.js'; import { Student } from '../../../src/entities/users/student.entity.js'; -import {LearningObjectNode, LearningPathResponse} from "dwengo-1-common/src/interfaces/learning-content"; +import { LearningObjectNode, LearningPathResponse } from 'dwengo-1-common/src/interfaces/learning-content'; async function initExampleData(): Promise<{ learningObject: LearningObject; learningPath: LearningPath }> { const learningObjectRepo = getLearningObjectRepository(); @@ -105,7 +105,11 @@ function expectBranchingObjectNode( describe('DatabaseLearningPathProvider', () => { let example: { learningObject: LearningObject; learningPath: LearningPath }; - let persTestData: { learningContent: ConditionTestLearningPathAndLearningObjects; studentA: Student; studentB: Student }; + let persTestData: { + learningContent: ConditionTestLearningPathAndLearningObjects; + studentA: Student; + studentB: Student; + }; beforeAll(async () => { await setupTestApp(); diff --git a/backend/tests/services/learning-path/learning-path-service.test.ts b/backend/tests/services/learning-path/learning-path-service.test.ts index 2a8906df..b4fb2ccc 100644 --- a/backend/tests/services/learning-path/learning-path-service.test.ts +++ b/backend/tests/services/learning-path/learning-path-service.test.ts @@ -1,11 +1,11 @@ import { beforeAll, describe, expect, it } from 'vitest'; +import { Language } from 'dwengo-1-common/src/util/language'; import { setupTestApp } from '../../setup-tests'; import { LearningObject } from '../../../src/entities/content/learning-object.entity'; import { LearningPath } from '../../../src/entities/content/learning-path.entity'; import { getLearningObjectRepository, getLearningPathRepository } from '../../../src/data/repositories'; import learningObjectExample from '../../test-assets/learning-objects/pn-werkingnotebooks/pn-werkingnotebooks-example'; import learningPathExample from '../../test-assets/learning-paths/pn-werking-example'; -import { Language } from '../../../src/entities/content/language'; import learningPathService from '../../../src/services/learning-paths/learning-path-service'; async function initExampleData(): Promise<{ learningObject: LearningObject; learningPath: LearningPath }> { diff --git a/backend/tests/test-assets/learning-objects/dummy/dummy-learning-object-example.ts b/backend/tests/test-assets/learning-objects/dummy/dummy-learning-object-example.ts index 2f2e78ad..cacafc8e 100644 --- a/backend/tests/test-assets/learning-objects/dummy/dummy-learning-object-example.ts +++ b/backend/tests/test-assets/learning-objects/dummy/dummy-learning-object-example.ts @@ -1,6 +1,6 @@ import { LearningObjectExample } from '../learning-object-example'; +import { Language } from 'dwengo-1-common/src/util/language'; import { LearningObject } from '../../../../src/entities/content/learning-object.entity'; -import { Language } from '../../../../src/entities/content/language'; import { loadTestAsset } from '../../../test-utils/load-test-asset'; import { DwengoContentType } from '../../../../src/services/learning-objects/processing/content-type'; import { EnvVars, getEnvVar } from '../../../../src/util/envvars'; diff --git a/backend/tests/test-assets/learning-objects/pn-werkingnotebooks/pn-werkingnotebooks-example.ts b/backend/tests/test-assets/learning-objects/pn-werkingnotebooks/pn-werkingnotebooks-example.ts index 600a4305..bcc4fd5d 100644 --- a/backend/tests/test-assets/learning-objects/pn-werkingnotebooks/pn-werkingnotebooks-example.ts +++ b/backend/tests/test-assets/learning-objects/pn-werkingnotebooks/pn-werkingnotebooks-example.ts @@ -1,5 +1,5 @@ import { LearningObjectExample } from '../learning-object-example'; -import { Language } from '../../../../src/entities/content/language'; +import { Language } from 'dwengo-1-common/src/util/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'; diff --git a/backend/tests/test-assets/learning-objects/test-essay/test-essay-example.ts b/backend/tests/test-assets/learning-objects/test-essay/test-essay-example.ts index d57c7a33..1a491682 100644 --- a/backend/tests/test-assets/learning-objects/test-essay/test-essay-example.ts +++ b/backend/tests/test-assets/learning-objects/test-essay/test-essay-example.ts @@ -1,8 +1,8 @@ import { LearningObjectExample } from '../learning-object-example'; +import { Language } from 'dwengo-1-common/src/util/language'; import { LearningObject } from '../../../../src/entities/content/learning-object.entity'; import { loadTestAsset } from '../../../test-utils/load-test-asset'; import { EnvVars, getEnvVar } from '../../../../src/util/envvars'; -import { Language } from '../../../../src/entities/content/language'; import { DwengoContentType } from '../../../../src/services/learning-objects/processing/content-type'; const example: LearningObjectExample = { diff --git a/backend/tests/test-assets/learning-objects/test-multiple-choice/test-multiple-choice-example.ts b/backend/tests/test-assets/learning-objects/test-multiple-choice/test-multiple-choice-example.ts index a634878a..cc25ebda 100644 --- a/backend/tests/test-assets/learning-objects/test-multiple-choice/test-multiple-choice-example.ts +++ b/backend/tests/test-assets/learning-objects/test-multiple-choice/test-multiple-choice-example.ts @@ -1,8 +1,8 @@ import { LearningObjectExample } from '../learning-object-example'; +import { Language } from 'dwengo-1-common/src/util/language'; import { LearningObject } from '../../../../src/entities/content/learning-object.entity'; import { loadTestAsset } from '../../../test-utils/load-test-asset'; import { EnvVars, getEnvVar } from '../../../../src/util/envvars'; -import { Language } from '../../../../src/entities/content/language'; import { DwengoContentType } from '../../../../src/services/learning-objects/processing/content-type'; const example: LearningObjectExample = { diff --git a/backend/tests/test-assets/learning-paths/learning-path-utils.ts b/backend/tests/test-assets/learning-paths/learning-path-utils.ts index c567de66..135e5c32 100644 --- a/backend/tests/test-assets/learning-paths/learning-path-utils.ts +++ b/backend/tests/test-assets/learning-paths/learning-path-utils.ts @@ -1,4 +1,4 @@ -import { Language } from '../../../src/entities/content/language'; +import { Language } from 'dwengo-1-common/src/util/language'; import { LearningPathTransition } from '../../../src/entities/content/learning-path-transition.entity'; import { LearningPathNode } from '../../../src/entities/content/learning-path-node.entity'; import { LearningPath } from '../../../src/entities/content/learning-path.entity'; diff --git a/backend/tests/test-assets/learning-paths/pn-werking-example.ts b/backend/tests/test-assets/learning-paths/pn-werking-example.ts index 810b4da5..99fa5c52 100644 --- a/backend/tests/test-assets/learning-paths/pn-werking-example.ts +++ b/backend/tests/test-assets/learning-paths/pn-werking-example.ts @@ -1,5 +1,5 @@ import { LearningPath } from '../../../src/entities/content/learning-path.entity'; -import { Language } from '../../../src/entities/content/language'; +import { Language } from 'dwengo-1-common/src/util/language'; import { EnvVars, getEnvVar } from '../../../src/util/envvars'; import { createLearningPathNode, createLearningPathTransition } from './learning-path-utils'; import { LearningPathNode } from '../../../src/entities/content/learning-path-node.entity'; diff --git a/backend/tests/test-assets/learning-paths/test-conditions-example.ts b/backend/tests/test-assets/learning-paths/test-conditions-example.ts index 07857235..6a89451f 100644 --- a/backend/tests/test-assets/learning-paths/test-conditions-example.ts +++ b/backend/tests/test-assets/learning-paths/test-conditions-example.ts @@ -1,5 +1,5 @@ import { LearningPath } from '../../../src/entities/content/learning-path.entity'; -import { Language } from '../../../src/entities/content/language'; +import { Language } from 'dwengo-1-common/src/util/language'; import testMultipleChoiceExample from '../learning-objects/test-multiple-choice/test-multiple-choice-example'; import { dummyLearningObject } from '../learning-objects/dummy/dummy-learning-object-example'; import { createLearningPathNode, createLearningPathTransition } from './learning-path-utils'; diff --git a/backend/tests/test-utils/expectations.ts b/backend/tests/test-utils/expectations.ts index 0dd4399c..25c52e2e 100644 --- a/backend/tests/test-utils/expectations.ts +++ b/backend/tests/test-utils/expectations.ts @@ -2,7 +2,7 @@ import { AssertionError } from 'node:assert'; import { LearningObject } from '../../src/entities/content/learning-object.entity'; import { LearningPath as LearningPathEntity } from '../../src/entities/content/learning-path.entity'; import { expect } from 'vitest'; -import {FilteredLearningObject, LearningPath} from "dwengo-1-common/src/interfaces/learning-content"; +import { FilteredLearningObject, LearningPath } from 'dwengo-1-common/src/interfaces/learning-content'; // Ignored properties because they belang for example to the class, not to the entity itself. const IGNORE_PROPERTIES = ['parent']; @@ -12,7 +12,13 @@ const IGNORE_PROPERTIES = ['parent']; * @param actual The actual entity retrieved from the database * @param expected The (previously added) entity we would expect to retrieve */ -export function expectToBeCorrectEntity(actual: { entity: T; name?: string }, expected: { entity: T; name?: string }): void { +export function expectToBeCorrectEntity( + actual: { entity: T; name?: string }, + expected: { + entity: T; + name?: string; + } +): void { if (!actual.name) { actual.name = 'actual'; } diff --git a/backend/tests/test_assets/assignments/assignments.testdata.ts b/backend/tests/test_assets/assignments/assignments.testdata.ts index 7f909de4..722821a0 100644 --- a/backend/tests/test_assets/assignments/assignments.testdata.ts +++ b/backend/tests/test_assets/assignments/assignments.testdata.ts @@ -1,7 +1,7 @@ import { Connection, EntityManager, IDatabaseDriver } from '@mikro-orm/core'; +import { Language } from 'dwengo-1-common/src/util/language'; import { Assignment } from '../../../src/entities/assignments/assignment.entity'; import { Class } from '../../../src/entities/classes/class.entity'; -import { Language } from '../../../src/entities/content/language'; export function makeTestAssignemnts(em: EntityManager>, classes: Array): Array { const assignment01 = em.create(Assignment, { diff --git a/backend/tests/test_assets/assignments/submission.testdata.ts b/backend/tests/test_assets/assignments/submission.testdata.ts index 95dd65df..f51de224 100644 --- a/backend/tests/test_assets/assignments/submission.testdata.ts +++ b/backend/tests/test_assets/assignments/submission.testdata.ts @@ -1,6 +1,6 @@ import { Connection, EntityManager, IDatabaseDriver } from '@mikro-orm/core'; +import { Language } from 'dwengo-1-common/src/util/language'; import { Submission } from '../../../src/entities/assignments/submission.entity'; -import { Language } from '../../../src/entities/content/language'; import { Student } from '../../../src/entities/users/student.entity'; import { Group } from '../../../src/entities/assignments/group.entity'; diff --git a/backend/tests/test_assets/content/learning-objects.testdata.ts b/backend/tests/test_assets/content/learning-objects.testdata.ts index 17ed4f01..760c99a2 100644 --- a/backend/tests/test_assets/content/learning-objects.testdata.ts +++ b/backend/tests/test_assets/content/learning-objects.testdata.ts @@ -1,6 +1,6 @@ import { Connection, EntityManager, IDatabaseDriver } from '@mikro-orm/core'; +import { Language } from 'dwengo-1-common/src/util/language'; import { LearningObject, ReturnValue } from '../../../src/entities/content/learning-object.entity'; -import { Language } from '../../../src/entities/content/language'; import { DwengoContentType } from '../../../src/services/learning-objects/processing/content-type'; export function makeTestLearningObjects(em: EntityManager>): Array { diff --git a/backend/tests/test_assets/content/learning-paths.testdata.ts b/backend/tests/test_assets/content/learning-paths.testdata.ts index 10de885c..d7888928 100644 --- a/backend/tests/test_assets/content/learning-paths.testdata.ts +++ b/backend/tests/test_assets/content/learning-paths.testdata.ts @@ -1,6 +1,6 @@ import { Connection, EntityManager, IDatabaseDriver } from '@mikro-orm/core'; +import { Language } from 'dwengo-1-common/src/util/language'; import { LearningPath } from '../../../src/entities/content/learning-path.entity'; -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'; diff --git a/backend/tests/test_assets/questions/questions.testdata.ts b/backend/tests/test_assets/questions/questions.testdata.ts index cea43e18..fbc79a36 100644 --- a/backend/tests/test_assets/questions/questions.testdata.ts +++ b/backend/tests/test_assets/questions/questions.testdata.ts @@ -1,6 +1,6 @@ import { Connection, EntityManager, IDatabaseDriver } from '@mikro-orm/core'; +import { Language } from 'dwengo-1-common/src/util/language'; import { Question } from '../../../src/entities/questions/question.entity'; -import { Language } from '../../../src/entities/content/language'; import { Student } from '../../../src/entities/users/student.entity'; export function makeTestQuestions(em: EntityManager>, students: Array): Array { diff --git a/common/src/interfaces/learning-content.d.ts b/common/src/interfaces/learning-content.d.ts index 5debdff6..bf0f84ff 100644 --- a/common/src/interfaces/learning-content.d.ts +++ b/common/src/interfaces/learning-content.d.ts @@ -1,4 +1,4 @@ -import { Language } from 'dwengo-1-backend/src/entities/content/language.js' +import { Language } from '../util/language'; export interface Transition { default: boolean; diff --git a/backend/src/entities/content/language.ts b/common/src/util/language.ts similarity index 100% rename from backend/src/entities/content/language.ts rename to common/src/util/language.ts From 358dcb07e034665fb649c775ceb7dcd024326bda Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Mon, 31 Mar 2025 22:42:20 +0200 Subject: [PATCH 14/19] fix(backend): Missende Language import --- backend/src/data/content/learning-object-repository.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/backend/src/data/content/learning-object-repository.ts b/backend/src/data/content/learning-object-repository.ts index 996a53bd..c5790aef 100644 --- a/backend/src/data/content/learning-object-repository.ts +++ b/backend/src/data/content/learning-object-repository.ts @@ -2,6 +2,7 @@ import { DwengoEntityRepository } from '../dwengo-entity-repository.js'; import { LearningObject } from '../../entities/content/learning-object.entity.js'; import { LearningObjectIdentifier } from '../../entities/content/learning-object-identifier.js'; import { Teacher } from '../../entities/users/teacher.entity.js'; +import { Language } from 'dwengo-1-common/src/util/language.js'; export class LearningObjectRepository extends DwengoEntityRepository { public findByIdentifier(identifier: LearningObjectIdentifier): Promise { From 28668947077c697997029be23d07b49685108757 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Tue, 1 Apr 2025 21:09:19 +0200 Subject: [PATCH 15/19] fix: Missing modules (?) --- backend/Dockerfile | 25 +++++++------------------ backend/package.json | 1 + backend/tsconfig.json | 4 +++- common/package.json | 4 ++++ common/tsconfig.json | 4 +++- package-lock.json | 1 + package.json | 2 +- tsconfig.json | 8 +++++++- 8 files changed, 27 insertions(+), 22 deletions(-) diff --git a/backend/Dockerfile b/backend/Dockerfile index c945a107..4226aa3a 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -1,6 +1,8 @@ -FROM node:22 AS build-stage +FROM node:22 -WORKDIR /app +WORKDIR /app/dwengo + +COPY ./backend/i18n ./i18n # Install dependencies @@ -19,22 +21,9 @@ COPY backend ./backend COPY common ./common COPY docs ./docs -WORKDIR /app/backend - -RUN npm run build - -FROM node:22 AS production-stage - -WORKDIR /app - -COPY package-lock.json backend/package.json ./ - -RUN npm install --silent --only=production - -COPY ./docs /docs -COPY ./backend/i18n /app/i18n -COPY --from=build-stage /app/backend/dist ./dist/ +RUN npm run build --workspace=common +RUN npm run build --workspace=backend EXPOSE 3000 -CMD ["node", "--env-file=.env", "dist/app.js"] +CMD ["node", "--env-file=/app/dwengo/backend/.env", "/app/dwengo/backend/dist/app.js"] diff --git a/backend/package.json b/backend/package.json index 4e3b890d..cf94d0b6 100644 --- a/backend/package.json +++ b/backend/package.json @@ -24,6 +24,7 @@ "cross": "^1.0.0", "cross-env": "^7.0.3", "dotenv": "^16.4.7", + "dwengo-1-common": "^0.1.1", "express": "^5.0.1", "express-jwt": "^8.5.1", "gift-pegjs": "^1.0.2", diff --git a/backend/tsconfig.json b/backend/tsconfig.json index 2dd3998d..a47827ba 100644 --- a/backend/tsconfig.json +++ b/backend/tsconfig.json @@ -4,6 +4,8 @@ "compilerOptions": { "rootDir": "./src", "outDir": "./dist", - "resolveJsonModule": true + "resolveJsonModule": true, + "sourceMap": true, + "composite": true } } diff --git a/common/package.json b/common/package.json index 68e7a56b..db8adfd0 100644 --- a/common/package.json +++ b/common/package.json @@ -5,8 +5,12 @@ "private": true, "type": "module", "scripts": { + "build": "tsc --project tsconfig.json", "format": "prettier --write src/", "format-check": "prettier --check src/", "lint": "eslint . --fix" + }, + "exports": { + "./src/*": "./dist/*" } } diff --git a/common/tsconfig.json b/common/tsconfig.json index 2dd3998d..a47827ba 100644 --- a/common/tsconfig.json +++ b/common/tsconfig.json @@ -4,6 +4,8 @@ "compilerOptions": { "rootDir": "./src", "outDir": "./dist", - "resolveJsonModule": true + "resolveJsonModule": true, + "sourceMap": true, + "composite": true } } diff --git a/package-lock.json b/package-lock.json index 863bd035..c41f2760 100644 --- a/package-lock.json +++ b/package-lock.json @@ -41,6 +41,7 @@ "cross": "^1.0.0", "cross-env": "^7.0.3", "dotenv": "^16.4.7", + "dwengo-1-common": "^0.1.1", "express": "^5.0.1", "express-jwt": "^8.5.1", "gift-pegjs": "^1.0.2", diff --git a/package.json b/package.json index 56e3d01c..c7eeccc3 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "private": true, "type": "module", "scripts": { - "build": "npm run build --workspace=backend --workspace=frontend", + "build": "npm run build --workspaces --if-present", "format": "npm run format --workspace=backend --workspace=common --workspace=frontend", "format-check": "npm run format-check --workspace=backend --workspace=common --workspace=frontend", "lint": "npm run lint --workspace=backend --workspace=common --workspace=frontend", diff --git a/tsconfig.json b/tsconfig.json index b41449cf..11be2711 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -121,5 +121,11 @@ "skipLibCheck": true, /* Skip type checking all .d.ts files. */ "resolveJsonModule": true - } + }, + "files": [], + "references": [ + { "path": "backend" }, + { "path": "common" }, + { "path": "frontend" } + ] } From d24eb9832ba02374ad165145f35f0c40fa680b39 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Wed, 2 Apr 2025 00:16:42 +0200 Subject: [PATCH 16/19] Revert "fix(backend): Missende Language import" This reverts commit 358dcb07e034665fb649c775ceb7dcd024326bda. --- backend/src/data/content/learning-object-repository.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/backend/src/data/content/learning-object-repository.ts b/backend/src/data/content/learning-object-repository.ts index 774bf0f3..2bdb6991 100644 --- a/backend/src/data/content/learning-object-repository.ts +++ b/backend/src/data/content/learning-object-repository.ts @@ -2,7 +2,6 @@ import { DwengoEntityRepository } from '../dwengo-entity-repository.js'; import { LearningObject } from '../../entities/content/learning-object.entity.js'; import { LearningObjectIdentifier } from '../../entities/content/learning-object-identifier.js'; import { Teacher } from '../../entities/users/teacher.entity.js'; -import { Language } from 'dwengo-1-common/src/util/language.js'; export class LearningObjectRepository extends DwengoEntityRepository { public async findByIdentifier(identifier: LearningObjectIdentifier): Promise { From 61f3afd9ae1ac81ca73312ae9add7eec48e850a0 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Wed, 2 Apr 2025 00:22:05 +0200 Subject: [PATCH 17/19] Revert "refactor(common): Language" This reverts commit bef6c6f75b2cf3bb0ffd069e1640f2a563cb371e. --- backend/src/controllers/learning-objects.ts | 2 +- backend/src/controllers/learning-paths.ts | 2 +- backend/src/controllers/questions.ts | 2 +- backend/src/controllers/submissions.ts | 2 +- backend/src/data/content/attachment-repository.ts | 2 +- backend/src/data/content/learning-object-repository.ts | 1 + backend/src/data/content/learning-path-repository.ts | 2 +- backend/src/entities/assignments/assignment.entity.ts | 2 +- backend/src/entities/assignments/submission.entity.ts | 2 +- .../util => backend/src/entities/content}/language.ts | 0 .../src/entities/content/learning-object-identifier.ts | 2 +- backend/src/entities/content/learning-object.entity.ts | 2 +- .../src/entities/content/learning-path-node.entity.ts | 2 +- backend/src/entities/content/learning-path.entity.ts | 2 +- backend/src/entities/questions/question.entity.ts | 2 +- backend/src/interfaces/assignment.ts | 2 +- .../database-learning-object-provider.ts | 2 +- .../processing/markdown/dwengo-marked-renderer.ts | 2 +- .../learning-objects/processing/processing-service.ts | 2 +- .../learning-paths/database-learning-path-provider.ts | 2 +- .../services/learning-paths/learning-path-provider.ts | 2 +- .../services/learning-paths/learning-path-service.ts | 2 +- backend/src/services/submissions.ts | 4 ++-- backend/tests/data/assignments/submissions.test.ts | 2 +- backend/tests/data/content/attachments.test.ts | 2 +- backend/tests/data/content/learning-objects.test.ts | 2 +- .../data/content/learning-path-repository.test.ts | 2 +- backend/tests/data/content/learning-paths.test.ts | 2 +- backend/tests/data/questions/answers.test.ts | 2 +- backend/tests/data/questions/questions.test.ts | 2 +- .../database-learning-object-provider.test.ts | 6 +++--- .../learning-objects/learning-object-service.test.ts | 8 ++++---- .../database-learning-path-provider.test.ts | 10 +++------- .../learning-path/learning-path-service.test.ts | 2 +- .../dummy/dummy-learning-object-example.ts | 2 +- .../pn-werkingnotebooks/pn-werkingnotebooks-example.ts | 2 +- .../learning-objects/test-essay/test-essay-example.ts | 2 +- .../test-multiple-choice-example.ts | 2 +- .../test-assets/learning-paths/learning-path-utils.ts | 2 +- .../test-assets/learning-paths/pn-werking-example.ts | 2 +- .../learning-paths/test-conditions-example.ts | 2 +- backend/tests/test-utils/expectations.ts | 10 ++-------- .../test_assets/assignments/assignments.testdata.ts | 2 +- .../test_assets/assignments/submission.testdata.ts | 2 +- .../test_assets/content/learning-objects.testdata.ts | 2 +- .../test_assets/content/learning-paths.testdata.ts | 2 +- .../tests/test_assets/questions/questions.testdata.ts | 2 +- common/src/interfaces/learning-content.d.ts | 2 +- 48 files changed, 56 insertions(+), 65 deletions(-) rename {common/src/util => backend/src/entities/content}/language.ts (100%) diff --git a/backend/src/controllers/learning-objects.ts b/backend/src/controllers/learning-objects.ts index 653b4c69..710999ce 100644 --- a/backend/src/controllers/learning-objects.ts +++ b/backend/src/controllers/learning-objects.ts @@ -2,11 +2,11 @@ import { Request, Response } from 'express'; import { FALLBACK_LANG } from '../config.js'; import learningObjectService from '../services/learning-objects/learning-object-service.js'; import { envVars, getEnvVar } from '../util/envVars.js'; +import { Language } from '../entities/content/language.js'; import attachmentService from '../services/learning-objects/attachment-service.js'; import { NotFoundError } from '@mikro-orm/core'; import { BadRequestException } from '../exceptions/bad-request-exception.js'; import { FilteredLearningObject, LearningObjectIdentifier, LearningPathIdentifier } from 'dwengo-1-common/src/interfaces/learning-content'; -import { Language } from 'dwengo-1-common/src/util/language.js'; function getLearningObjectIdentifierFromRequest(req: Request): LearningObjectIdentifier { if (!req.params.hruid) { diff --git a/backend/src/controllers/learning-paths.ts b/backend/src/controllers/learning-paths.ts index 23b77115..04e44b59 100644 --- a/backend/src/controllers/learning-paths.ts +++ b/backend/src/controllers/learning-paths.ts @@ -2,6 +2,7 @@ import { Request, Response } from 'express'; import { themes } from '../data/themes.js'; import { FALLBACK_LANG } from '../config.js'; import learningPathService from '../services/learning-paths/learning-path-service.js'; +import { Language } from '../entities/content/language.js'; import { PersonalizationTarget, personalizedForGroup, @@ -9,7 +10,6 @@ import { } from '../services/learning-paths/learning-path-personalization-util.js'; import { BadRequestException } from '../exceptions/bad-request-exception.js'; import { NotFoundException } from '../exceptions/not-found-exception.js'; -import { Language } from 'dwengo-1-common/src/util/language.js'; /** * Fetch learning paths based on query parameters. diff --git a/backend/src/controllers/questions.ts b/backend/src/controllers/questions.ts index bfaeb24a..089931f3 100644 --- a/backend/src/controllers/questions.ts +++ b/backend/src/controllers/questions.ts @@ -2,8 +2,8 @@ import { Request, Response } from 'express'; import { createQuestion, deleteQuestion, getAllQuestions, getAnswersByQuestion, getQuestion } from '../services/questions.js'; import { FALLBACK_LANG, FALLBACK_SEQ_NUM } from '../config.js'; import { LearningObjectIdentifier } from '../entities/content/learning-object-identifier.js'; +import { Language } from '../entities/content/language.js'; import { QuestionDTO, QuestionId } from 'dwengo-1-common/src/interfaces/question'; -import { Language } from 'dwengo-1-common/src/util/language.js'; function getObjectId(req: Request, res: Response): LearningObjectIdentifier | null { const { hruid, version } = req.params; diff --git a/backend/src/controllers/submissions.ts b/backend/src/controllers/submissions.ts index 88107831..df0f6e48 100644 --- a/backend/src/controllers/submissions.ts +++ b/backend/src/controllers/submissions.ts @@ -1,8 +1,8 @@ import { Request, Response } from 'express'; import { createSubmission, deleteSubmission, getSubmission } from '../services/submissions.js'; +import { Language, languageMap } from '../entities/content/language.js'; import { SubmissionDTO } from 'dwengo-1-common/src/interfaces/submission'; -import { Language, languageMap } from 'dwengo-1-common/src/util/language.js'; interface SubmissionParams { hruid: string; diff --git a/backend/src/data/content/attachment-repository.ts b/backend/src/data/content/attachment-repository.ts index 36e6807e..73baa943 100644 --- a/backend/src/data/content/attachment-repository.ts +++ b/backend/src/data/content/attachment-repository.ts @@ -1,7 +1,7 @@ import { DwengoEntityRepository } from '../dwengo-entity-repository.js'; import { Attachment } from '../../entities/content/attachment.entity.js'; +import { Language } from '../../entities/content/language'; import { LearningObjectIdentifier } from '../../entities/content/learning-object-identifier'; -import { Language } from 'dwengo-1-common/src/util/language.js'; export class AttachmentRepository extends DwengoEntityRepository { public async findByLearningObjectIdAndName(learningObjectId: LearningObjectIdentifier, name: string): Promise { diff --git a/backend/src/data/content/learning-object-repository.ts b/backend/src/data/content/learning-object-repository.ts index 2bdb6991..4684c6cc 100644 --- a/backend/src/data/content/learning-object-repository.ts +++ b/backend/src/data/content/learning-object-repository.ts @@ -1,6 +1,7 @@ import { DwengoEntityRepository } from '../dwengo-entity-repository.js'; import { LearningObject } from '../../entities/content/learning-object.entity.js'; import { LearningObjectIdentifier } from '../../entities/content/learning-object-identifier.js'; +import { Language } from '../../entities/content/language.js'; import { Teacher } from '../../entities/users/teacher.entity.js'; export class LearningObjectRepository extends DwengoEntityRepository { diff --git a/backend/src/data/content/learning-path-repository.ts b/backend/src/data/content/learning-path-repository.ts index 7047e47b..e34508ec 100644 --- a/backend/src/data/content/learning-path-repository.ts +++ b/backend/src/data/content/learning-path-repository.ts @@ -1,6 +1,6 @@ import { DwengoEntityRepository } from '../dwengo-entity-repository.js'; import { LearningPath } from '../../entities/content/learning-path.entity.js'; -import { Language } from 'dwengo-1-common/src/util/language.js'; +import { Language } from '../../entities/content/language.js'; export class LearningPathRepository extends DwengoEntityRepository { public async findByHruidAndLanguage(hruid: string, language: Language): Promise { diff --git a/backend/src/entities/assignments/assignment.entity.ts b/backend/src/entities/assignments/assignment.entity.ts index 59b71d67..daa71ed6 100644 --- a/backend/src/entities/assignments/assignment.entity.ts +++ b/backend/src/entities/assignments/assignment.entity.ts @@ -1,8 +1,8 @@ import { Entity, Enum, ManyToOne, OneToMany, PrimaryKey, Property } from '@mikro-orm/core'; import { Class } from '../classes/class.entity.js'; import { Group } from './group.entity.js'; +import { Language } from '../content/language.js'; import { AssignmentRepository } from '../../data/assignments/assignment-repository.js'; -import { Language } from 'dwengo-1-common/src/util/language.js'; @Entity({ repository: () => AssignmentRepository, diff --git a/backend/src/entities/assignments/submission.entity.ts b/backend/src/entities/assignments/submission.entity.ts index b86da578..e4330e0d 100644 --- a/backend/src/entities/assignments/submission.entity.ts +++ b/backend/src/entities/assignments/submission.entity.ts @@ -1,8 +1,8 @@ import { Student } from '../users/student.entity.js'; import { Group } from './group.entity.js'; import { Entity, Enum, ManyToOne, PrimaryKey, Property } from '@mikro-orm/core'; +import { Language } from '../content/language.js'; import { SubmissionRepository } from '../../data/assignments/submission-repository.js'; -import { Language } from 'dwengo-1-common/src/util/language.js'; @Entity({ repository: () => SubmissionRepository }) export class Submission { diff --git a/common/src/util/language.ts b/backend/src/entities/content/language.ts similarity index 100% rename from common/src/util/language.ts rename to backend/src/entities/content/language.ts diff --git a/backend/src/entities/content/learning-object-identifier.ts b/backend/src/entities/content/learning-object-identifier.ts index 68f6980a..9234afa7 100644 --- a/backend/src/entities/content/learning-object-identifier.ts +++ b/backend/src/entities/content/learning-object-identifier.ts @@ -1,4 +1,4 @@ -import { Language } from 'dwengo-1-common/src/util/language'; +import { Language } from './language.js'; export class LearningObjectIdentifier { constructor( diff --git a/backend/src/entities/content/learning-object.entity.ts b/backend/src/entities/content/learning-object.entity.ts index d74d64b4..db009e7a 100644 --- a/backend/src/entities/content/learning-object.entity.ts +++ b/backend/src/entities/content/learning-object.entity.ts @@ -1,11 +1,11 @@ import { Embedded, Entity, Enum, ManyToMany, OneToMany, PrimaryKey, Property } from '@mikro-orm/core'; -import { Language } from 'dwengo-1-common/src/util/language.js'; import { Attachment } from './attachment.entity.js'; import { Teacher } from '../users/teacher.entity.js'; import { DwengoContentType } from '../../services/learning-objects/processing/content-type.js'; import { v4 } from 'uuid'; import { LearningObjectRepository } from '../../data/content/learning-object-repository.js'; import { EducationalGoal } from './educational-goal.entity.js'; +import { Language } from './language.js'; import { ReturnValue } from './return-value.entity.js'; @Entity({ repository: () => LearningObjectRepository }) diff --git a/backend/src/entities/content/learning-path-node.entity.ts b/backend/src/entities/content/learning-path-node.entity.ts index 129ff708..03499270 100644 --- a/backend/src/entities/content/learning-path-node.entity.ts +++ b/backend/src/entities/content/learning-path-node.entity.ts @@ -1,7 +1,7 @@ import { Entity, Enum, ManyToOne, OneToMany, PrimaryKey, Property, Rel } from '@mikro-orm/core'; +import { Language } from './language.js'; import { LearningPath } from './learning-path.entity.js'; import { LearningPathTransition } from './learning-path-transition.entity.js'; -import { Language } from 'dwengo-1-common/src/util/language.js'; @Entity() export class LearningPathNode { diff --git a/backend/src/entities/content/learning-path.entity.ts b/backend/src/entities/content/learning-path.entity.ts index f486d5b1..888cc0cf 100644 --- a/backend/src/entities/content/learning-path.entity.ts +++ b/backend/src/entities/content/learning-path.entity.ts @@ -1,8 +1,8 @@ import { Entity, Enum, ManyToMany, OneToMany, PrimaryKey, Property } from '@mikro-orm/core'; +import { Language } from './language.js'; import { Teacher } from '../users/teacher.entity.js'; import { LearningPathRepository } from '../../data/content/learning-path-repository.js'; import { LearningPathNode } from './learning-path-node.entity.js'; -import { Language } from 'dwengo-1-common/src/util/language.js'; @Entity({ repository: () => LearningPathRepository }) export class LearningPath { diff --git a/backend/src/entities/questions/question.entity.ts b/backend/src/entities/questions/question.entity.ts index 4de3e676..09e3cd46 100644 --- a/backend/src/entities/questions/question.entity.ts +++ b/backend/src/entities/questions/question.entity.ts @@ -1,7 +1,7 @@ import { Entity, Enum, ManyToOne, PrimaryKey, Property } from '@mikro-orm/core'; +import { Language } from '../content/language.js'; import { Student } from '../users/student.entity.js'; import { QuestionRepository } from '../../data/questions/question-repository.js'; -import { Language } from 'dwengo-1-common/src/util/language.js'; @Entity({ repository: () => QuestionRepository }) export class Question { diff --git a/backend/src/interfaces/assignment.ts b/backend/src/interfaces/assignment.ts index bdd5b932..84cbd0cf 100644 --- a/backend/src/interfaces/assignment.ts +++ b/backend/src/interfaces/assignment.ts @@ -1,8 +1,8 @@ -import { languageMap } from 'dwengo-1-common/src/util/language.js'; import { FALLBACK_LANG } from '../config.js'; import { Assignment } from '../entities/assignments/assignment.entity.js'; import { Class } from '../entities/classes/class.entity.js'; import { getLogger } from '../logging/initalize.js'; +import { languageMap } from '../entities/content/language.js'; import { AssignmentDTO } from 'dwengo-1-common/src/interfaces/assignment'; export function mapToAssignmentDTOId(assignment: Assignment): AssignmentDTO { diff --git a/backend/src/services/learning-objects/database-learning-object-provider.ts b/backend/src/services/learning-objects/database-learning-object-provider.ts index cf1d7090..5624fc19 100644 --- a/backend/src/services/learning-objects/database-learning-object-provider.ts +++ b/backend/src/services/learning-objects/database-learning-object-provider.ts @@ -1,5 +1,6 @@ import { LearningObjectProvider } from './learning-object-provider.js'; import { getLearningObjectRepository, getLearningPathRepository } from '../../data/repositories.js'; +import { Language } from '../../entities/content/language.js'; import { LearningObject } from '../../entities/content/learning-object.entity.js'; import { getUrlStringForLearningObject } from '../../util/links.js'; import processingService from './processing/processing-service.js'; @@ -7,7 +8,6 @@ import { NotFoundError } from '@mikro-orm/core'; import learningObjectService from './learning-object-service.js'; import { getLogger, Logger } from '../../logging/initalize.js'; import { FilteredLearningObject, LearningObjectIdentifier, LearningPathIdentifier } from 'dwengo-1-common/src/interfaces/learning-content'; -import { Language } from 'dwengo-1-common/src/util/language.js'; const logger: Logger = getLogger(); diff --git a/backend/src/services/learning-objects/processing/markdown/dwengo-marked-renderer.ts b/backend/src/services/learning-objects/processing/markdown/dwengo-marked-renderer.ts index c2d04bd5..3b9ad4e5 100644 --- a/backend/src/services/learning-objects/processing/markdown/dwengo-marked-renderer.ts +++ b/backend/src/services/learning-objects/processing/markdown/dwengo-marked-renderer.ts @@ -8,13 +8,13 @@ import InlineImageProcessor from '../image/inline-image-processor.js'; import * as marked from 'marked'; import { getUrlStringForLearningObjectHTML, isValidHttpUrl } from '../../../../util/links.js'; import { ProcessingError } from '../processing-error.js'; +import { Language } from '../../../../entities/content/language.js'; import Image = marked.Tokens.Image; import Heading = marked.Tokens.Heading; import Link = marked.Tokens.Link; import RendererObject = marked.RendererObject; import { LearningObjectIdentifier } from 'dwengo-1-common/src/interfaces/learning-content'; -import { Language } from 'dwengo-1-common/src/util/language.js'; const prefixes = { learningObject: '@learning-object', diff --git a/backend/src/services/learning-objects/processing/processing-service.ts b/backend/src/services/learning-objects/processing/processing-service.ts index 0b647727..d0d43061 100644 --- a/backend/src/services/learning-objects/processing/processing-service.ts +++ b/backend/src/services/learning-objects/processing/processing-service.ts @@ -13,9 +13,9 @@ import GiftProcessor from './gift/gift-processor.js'; import { LearningObject } from '../../../entities/content/learning-object.entity.js'; import Processor from './processor.js'; import { DwengoContentType } from './content-type.js'; +import { Language } from '../../../entities/content/language.js'; import { replaceAsync } from '../../../util/async.js'; import { LearningObjectIdentifier } from 'dwengo-1-common/src/interfaces/learning-content'; -import { Language } from 'dwengo-1-common/src/util/language.js'; const EMBEDDED_LEARNING_OBJECT_PLACEHOLDER = //g; const LEARNING_OBJECT_DOES_NOT_EXIST = "
"; diff --git a/backend/src/services/learning-paths/database-learning-path-provider.ts b/backend/src/services/learning-paths/database-learning-path-provider.ts index 3c3e80cb..d0fcf630 100644 --- a/backend/src/services/learning-paths/database-learning-path-provider.ts +++ b/backend/src/services/learning-paths/database-learning-path-provider.ts @@ -1,6 +1,7 @@ import { LearningPathProvider } from './learning-path-provider.js'; import { LearningPath as LearningPathEntity } from '../../entities/content/learning-path.entity.js'; import { getLearningPathRepository } from '../../data/repositories.js'; +import { Language } from '../../entities/content/language.js'; import learningObjectService from '../learning-objects/learning-object-service.js'; import { LearningPathNode } from '../../entities/content/learning-path-node.entity.js'; import { LearningPathTransition } from '../../entities/content/learning-path-transition.entity.js'; @@ -12,7 +13,6 @@ import { LearningPathResponse, Transition, } from 'dwengo-1-common/src/interfaces/learning-content'; -import { Language } from 'dwengo-1-common/src/util/language.js'; /** * Fetches the corresponding learning object for each of the nodes and creates a map that maps each node to its diff --git a/backend/src/services/learning-paths/learning-path-provider.ts b/backend/src/services/learning-paths/learning-path-provider.ts index 99a05ab0..a904296a 100644 --- a/backend/src/services/learning-paths/learning-path-provider.ts +++ b/backend/src/services/learning-paths/learning-path-provider.ts @@ -1,4 +1,4 @@ -import { Language } from 'dwengo-1-common/src/util/language.js'; +import { Language } from '../../entities/content/language.js'; import { PersonalizationTarget } from './learning-path-personalization-util.js'; import { LearningPath, LearningPathResponse } from 'dwengo-1-common/src/interfaces/learning-content'; diff --git a/backend/src/services/learning-paths/learning-path-service.ts b/backend/src/services/learning-paths/learning-path-service.ts index d9cdc7bb..bebfe8a9 100644 --- a/backend/src/services/learning-paths/learning-path-service.ts +++ b/backend/src/services/learning-paths/learning-path-service.ts @@ -1,9 +1,9 @@ import dwengoApiLearningPathProvider from './dwengo-api-learning-path-provider.js'; import databaseLearningPathProvider from './database-learning-path-provider.js'; import { envVars, getEnvVar } from '../../util/envVars.js'; +import { Language } from '../../entities/content/language.js'; import { PersonalizationTarget } from './learning-path-personalization-util.js'; import { LearningPath, LearningPathResponse } from 'dwengo-1-common/src/interfaces/learning-content'; -import { Language } from 'dwengo-1-common/src/util/language.js'; const userContentPrefix = getEnvVar(envVars.UserContentPrefix); const allProviders = [dwengoApiLearningPathProvider, databaseLearningPathProvider]; diff --git a/backend/src/services/submissions.ts b/backend/src/services/submissions.ts index 15371d69..e5c040b6 100644 --- a/backend/src/services/submissions.ts +++ b/backend/src/services/submissions.ts @@ -1,5 +1,5 @@ -import { Language } from 'dwengo-1-common/src/util/language.js'; -import { getSubmissionRepository } from '../data/repositories.js'; +import { getGroupRepository, getSubmissionRepository } from '../data/repositories.js'; +import { Language } from '../entities/content/language.js'; import { LearningObjectIdentifier } from '../entities/content/learning-object-identifier.js'; import { mapToSubmission, mapToSubmissionDTO } from '../interfaces/submission.js'; import { SubmissionDTO } from 'dwengo-1-common/src/interfaces/submission'; diff --git a/backend/tests/data/assignments/submissions.test.ts b/backend/tests/data/assignments/submissions.test.ts index d2595973..cd212b77 100644 --- a/backend/tests/data/assignments/submissions.test.ts +++ b/backend/tests/data/assignments/submissions.test.ts @@ -9,11 +9,11 @@ import { getSubmissionRepository, } from '../../../src/data/repositories'; import { LearningObjectIdentifier } from '../../../src/entities/content/learning-object-identifier'; +import { Language } from '../../../src/entities/content/language'; import { StudentRepository } from '../../../src/data/users/student-repository'; import { GroupRepository } from '../../../src/data/assignments/group-repository'; import { AssignmentRepository } from '../../../src/data/assignments/assignment-repository'; import { ClassRepository } from '../../../src/data/classes/class-repository'; -import { Language } from 'dwengo-1-common/src/util/language'; describe('SubmissionRepository', () => { let submissionRepository: SubmissionRepository; diff --git a/backend/tests/data/content/attachments.test.ts b/backend/tests/data/content/attachments.test.ts index 42adc507..94e132a9 100644 --- a/backend/tests/data/content/attachments.test.ts +++ b/backend/tests/data/content/attachments.test.ts @@ -4,7 +4,7 @@ import { getAttachmentRepository, getLearningObjectRepository } from '../../../s import { AttachmentRepository } from '../../../src/data/content/attachment-repository.js'; import { LearningObjectRepository } from '../../../src/data/content/learning-object-repository.js'; import { LearningObjectIdentifier } from '../../../src/entities/content/learning-object-identifier.js'; -import { Language } from 'dwengo-1-common/src/util/language.js'; +import { Language } from '../../../src/entities/content/language.js'; describe('AttachmentRepository', () => { let attachmentRepository: AttachmentRepository; diff --git a/backend/tests/data/content/learning-objects.test.ts b/backend/tests/data/content/learning-objects.test.ts index c996f7cd..712f75c9 100644 --- a/backend/tests/data/content/learning-objects.test.ts +++ b/backend/tests/data/content/learning-objects.test.ts @@ -3,7 +3,7 @@ import { LearningObjectRepository } from '../../../src/data/content/learning-obj import { getLearningObjectRepository } from '../../../src/data/repositories'; import { setupTestApp } from '../../setup-tests'; import { LearningObjectIdentifier } from '../../../src/entities/content/learning-object-identifier'; -import { Language } from 'dwengo-1-common/src/util/language'; +import { Language } from '../../../src/entities/content/language'; describe('LearningObjectRepository', () => { let learningObjectRepository: LearningObjectRepository; diff --git a/backend/tests/data/content/learning-path-repository.test.ts b/backend/tests/data/content/learning-path-repository.test.ts index 67c0c7d7..4424fced 100644 --- a/backend/tests/data/content/learning-path-repository.test.ts +++ b/backend/tests/data/content/learning-path-repository.test.ts @@ -5,7 +5,7 @@ import { LearningPathRepository } from '../../../src/data/content/learning-path- import example from '../../test-assets/learning-paths/pn-werking-example.js'; import { LearningPath } from '../../../src/entities/content/learning-path.entity.js'; import { expectToBeCorrectEntity } from '../../test-utils/expectations.js'; -import { Language } from 'dwengo-1-common/src/util/language'; +import { Language } from '../../../src/entities/content/language.js'; function expectToHaveFoundPrecisely(expected: LearningPath, result: LearningPath[]): void { expect(result).toHaveProperty('length'); diff --git a/backend/tests/data/content/learning-paths.test.ts b/backend/tests/data/content/learning-paths.test.ts index 37801e1a..01fd20e5 100644 --- a/backend/tests/data/content/learning-paths.test.ts +++ b/backend/tests/data/content/learning-paths.test.ts @@ -2,7 +2,7 @@ import { beforeAll, describe, expect, it } from 'vitest'; import { getLearningPathRepository } from '../../../src/data/repositories'; import { LearningPathRepository } from '../../../src/data/content/learning-path-repository'; import { setupTestApp } from '../../setup-tests'; -import { Language } from 'dwengo-1-common/src/util/language'; +import { Language } from '../../../src/entities/content/language'; describe('LearningPathRepository', () => { let learningPathRepository: LearningPathRepository; diff --git a/backend/tests/data/questions/answers.test.ts b/backend/tests/data/questions/answers.test.ts index 4ce179fe..59917c3f 100644 --- a/backend/tests/data/questions/answers.test.ts +++ b/backend/tests/data/questions/answers.test.ts @@ -1,10 +1,10 @@ import { beforeAll, describe, expect, it } from 'vitest'; -import { Language } from 'dwengo-1-common/src/util/language'; import { setupTestApp } from '../../setup-tests'; import { AnswerRepository } from '../../../src/data/questions/answer-repository'; import { getAnswerRepository, getQuestionRepository, getTeacherRepository } from '../../../src/data/repositories'; import { QuestionRepository } from '../../../src/data/questions/question-repository'; import { LearningObjectIdentifier } from '../../../src/entities/content/learning-object-identifier'; +import { Language } from '../../../src/entities/content/language'; import { TeacherRepository } from '../../../src/data/users/teacher-repository'; describe('AnswerRepository', () => { diff --git a/backend/tests/data/questions/questions.test.ts b/backend/tests/data/questions/questions.test.ts index 3645cf8e..c1d2b483 100644 --- a/backend/tests/data/questions/questions.test.ts +++ b/backend/tests/data/questions/questions.test.ts @@ -1,10 +1,10 @@ import { beforeAll, describe, expect, it } from 'vitest'; -import { Language } from 'dwengo-1-common/src/util/language'; import { setupTestApp } from '../../setup-tests'; import { QuestionRepository } from '../../../src/data/questions/question-repository'; import { getQuestionRepository, getStudentRepository } from '../../../src/data/repositories'; import { StudentRepository } from '../../../src/data/users/student-repository'; import { LearningObjectIdentifier } from '../../../src/entities/content/learning-object-identifier'; +import { Language } from '../../../src/entities/content/language'; describe('QuestionRepository', () => { let questionRepository: QuestionRepository; diff --git a/backend/tests/services/learning-objects/database-learning-object-provider.test.ts b/backend/tests/services/learning-objects/database-learning-object-provider.test.ts index c54711eb..03248c55 100644 --- a/backend/tests/services/learning-objects/database-learning-object-provider.test.ts +++ b/backend/tests/services/learning-objects/database-learning-object-provider.test.ts @@ -1,15 +1,15 @@ import { beforeAll, describe, expect, it } from 'vitest'; -import { Language } from 'dwengo-1-common/src/util/language'; import { setupTestApp } from '../../setup-tests'; import { getLearningObjectRepository, getLearningPathRepository } from '../../../src/data/repositories'; import example from '../../test-assets/learning-objects/pn-werkingnotebooks/pn-werkingnotebooks-example'; -import learningObjectExample from '../../test-assets/learning-objects/pn-werkingnotebooks/pn-werkingnotebooks-example'; import { LearningObject } from '../../../src/entities/content/learning-object.entity'; import databaseLearningObjectProvider from '../../../src/services/learning-objects/database-learning-object-provider'; import { expectToBeCorrectFilteredLearningObject } from '../../test-utils/expectations'; +import { Language } from '../../../src/entities/content/language'; +import learningObjectExample from '../../test-assets/learning-objects/pn-werkingnotebooks/pn-werkingnotebooks-example'; import learningPathExample from '../../test-assets/learning-paths/pn-werking-example'; import { LearningPath } from '../../../src/entities/content/learning-path.entity'; -import { FilteredLearningObject } from 'dwengo-1-common/src/interfaces/learning-content'; +import {FilteredLearningObject} from "dwengo-1-common/src/interfaces/learning-content"; async function initExampleData(): Promise<{ learningObject: LearningObject; learningPath: LearningPath }> { const learningObjectRepo = getLearningObjectRepository(); diff --git a/backend/tests/services/learning-objects/learning-object-service.test.ts b/backend/tests/services/learning-objects/learning-object-service.test.ts index 7f69c84f..abcae538 100644 --- a/backend/tests/services/learning-objects/learning-object-service.test.ts +++ b/backend/tests/services/learning-objects/learning-object-service.test.ts @@ -1,10 +1,10 @@ import { beforeAll, describe, expect, it } from 'vitest'; -import { Language } from 'dwengo-1-common/src/util/language'; import { setupTestApp } from '../../setup-tests'; import { LearningObject } from '../../../src/entities/content/learning-object.entity'; import { getLearningObjectRepository, getLearningPathRepository } from '../../../src/data/repositories'; import learningObjectExample from '../../test-assets/learning-objects/pn-werkingnotebooks/pn-werkingnotebooks-example'; import learningObjectService from '../../../src/services/learning-objects/learning-object-service'; +import { Language } from '../../../src/entities/content/language'; import { envVars, getEnvVar } from '../../../src/util/envVars'; import { LearningPath } from '../../../src/entities/content/learning-path.entity'; import learningPathExample from '../../test-assets/learning-paths/pn-werking-example'; @@ -73,18 +73,18 @@ describe('LearningObjectService', () => { }); it( 'returns the same HTML as the Dwengo API when queried with the identifier of a learning object that does ' + - 'not start with the user content prefix', + 'not start with the user content prefix', async () => { const result = await learningObjectService.getLearningObjectHTML(DWENGO_TEST_LEARNING_OBJECT_ID); expect(result).not.toBeNull(); const responseFromDwengoApi = await fetch( getEnvVar(envVars.LearningContentRepoApiBaseUrl) + - `/learningObject/getRaw?hruid=${DWENGO_TEST_LEARNING_OBJECT_ID.hruid}&language=${DWENGO_TEST_LEARNING_OBJECT_ID.language}&version=${DWENGO_TEST_LEARNING_OBJECT_ID.version}` + `/learningObject/getRaw?hruid=${DWENGO_TEST_LEARNING_OBJECT_ID.hruid}&language=${DWENGO_TEST_LEARNING_OBJECT_ID.language}&version=${DWENGO_TEST_LEARNING_OBJECT_ID.version}`, ); const responseHtml = await responseFromDwengoApi.text(); expect(result).toEqual(responseHtml); - } + }, ); it('returns null when queried with a non-existing identifier', async () => { const result = await learningObjectService.getLearningObjectHTML({ diff --git a/backend/tests/services/learning-path/database-learning-path-provider.test.ts b/backend/tests/services/learning-path/database-learning-path-provider.test.ts index 807104c1..30e07a5a 100644 --- a/backend/tests/services/learning-path/database-learning-path-provider.test.ts +++ b/backend/tests/services/learning-path/database-learning-path-provider.test.ts @@ -1,5 +1,4 @@ import { beforeAll, describe, expect, it } from 'vitest'; -import { Language } from 'dwengo-1-common/src/util/language'; import { LearningObject } from '../../../src/entities/content/learning-object.entity.js'; import { setupTestApp } from '../../setup-tests.js'; import { LearningPath } from '../../../src/entities/content/learning-path.entity.js'; @@ -14,13 +13,14 @@ import learningPathExample from '../../test-assets/learning-paths/pn-werking-exa import databaseLearningPathProvider from '../../../src/services/learning-paths/database-learning-path-provider.js'; import { expectToBeCorrectLearningPath } from '../../test-utils/expectations.js'; import learningObjectService from '../../../src/services/learning-objects/learning-object-service.js'; +import { Language } from '../../../src/entities/content/language.js'; import { ConditionTestLearningPathAndLearningObjects, createConditionTestLearningPathAndLearningObjects, } from '../../test-assets/learning-paths/test-conditions-example.js'; import { Student } from '../../../src/entities/users/student.entity.js'; -import { LearningObjectNode, LearningPathResponse } from 'dwengo-1-common/src/interfaces/learning-content'; +import {LearningObjectNode, LearningPathResponse} from "dwengo-1-common/src/interfaces/learning-content"; async function initExampleData(): Promise<{ learningObject: LearningObject; learningPath: LearningPath }> { const learningObjectRepo = getLearningObjectRepository(); @@ -103,11 +103,7 @@ function expectBranchingObjectNode( describe('DatabaseLearningPathProvider', () => { let example: { learningObject: LearningObject; learningPath: LearningPath }; - let persTestData: { - learningContent: ConditionTestLearningPathAndLearningObjects; - studentA: Student; - studentB: Student; - }; + let persTestData: { learningContent: ConditionTestLearningPathAndLearningObjects; studentA: Student; studentB: Student }; beforeAll(async () => { await setupTestApp(); diff --git a/backend/tests/services/learning-path/learning-path-service.test.ts b/backend/tests/services/learning-path/learning-path-service.test.ts index dd91d39c..7a45dc43 100644 --- a/backend/tests/services/learning-path/learning-path-service.test.ts +++ b/backend/tests/services/learning-path/learning-path-service.test.ts @@ -1,11 +1,11 @@ import { beforeAll, describe, expect, it } from 'vitest'; -import { Language } from 'dwengo-1-common/src/util/language'; import { setupTestApp } from '../../setup-tests'; import { LearningObject } from '../../../src/entities/content/learning-object.entity'; import { LearningPath } from '../../../src/entities/content/learning-path.entity'; import { getLearningObjectRepository, getLearningPathRepository } from '../../../src/data/repositories'; import learningObjectExample from '../../test-assets/learning-objects/pn-werkingnotebooks/pn-werkingnotebooks-example'; import learningPathExample from '../../test-assets/learning-paths/pn-werking-example'; +import { Language } from '../../../src/entities/content/language'; import learningPathService from '../../../src/services/learning-paths/learning-path-service'; async function initExampleData(): Promise<{ learningObject: LearningObject; learningPath: LearningPath }> { diff --git a/backend/tests/test-assets/learning-objects/dummy/dummy-learning-object-example.ts b/backend/tests/test-assets/learning-objects/dummy/dummy-learning-object-example.ts index dfddd53f..f810d57a 100644 --- a/backend/tests/test-assets/learning-objects/dummy/dummy-learning-object-example.ts +++ b/backend/tests/test-assets/learning-objects/dummy/dummy-learning-object-example.ts @@ -1,6 +1,6 @@ import { LearningObjectExample } from '../learning-object-example'; -import { Language } from 'dwengo-1-common/src/util/language'; import { LearningObject } from '../../../../src/entities/content/learning-object.entity'; +import { Language } from '../../../../src/entities/content/language'; import { loadTestAsset } from '../../../test-utils/load-test-asset'; import { DwengoContentType } from '../../../../src/services/learning-objects/processing/content-type'; import { envVars, getEnvVar } from '../../../../src/util/envVars'; diff --git a/backend/tests/test-assets/learning-objects/pn-werkingnotebooks/pn-werkingnotebooks-example.ts b/backend/tests/test-assets/learning-objects/pn-werkingnotebooks/pn-werkingnotebooks-example.ts index 481b020e..835a0ed0 100644 --- a/backend/tests/test-assets/learning-objects/pn-werkingnotebooks/pn-werkingnotebooks-example.ts +++ b/backend/tests/test-assets/learning-objects/pn-werkingnotebooks/pn-werkingnotebooks-example.ts @@ -1,5 +1,5 @@ import { LearningObjectExample } from '../learning-object-example'; -import { Language } from 'dwengo-1-common/src/util/language'; +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 { LearningObject } from '../../../../src/entities/content/learning-object.entity'; diff --git a/backend/tests/test-assets/learning-objects/test-essay/test-essay-example.ts b/backend/tests/test-assets/learning-objects/test-essay/test-essay-example.ts index 9499a586..943a10c7 100644 --- a/backend/tests/test-assets/learning-objects/test-essay/test-essay-example.ts +++ b/backend/tests/test-assets/learning-objects/test-essay/test-essay-example.ts @@ -1,8 +1,8 @@ import { LearningObjectExample } from '../learning-object-example'; -import { Language } from 'dwengo-1-common/src/util/language'; import { LearningObject } from '../../../../src/entities/content/learning-object.entity'; import { loadTestAsset } from '../../../test-utils/load-test-asset'; import { envVars, getEnvVar } from '../../../../src/util/envVars'; +import { Language } from '../../../../src/entities/content/language'; import { DwengoContentType } from '../../../../src/services/learning-objects/processing/content-type'; const example: LearningObjectExample = { diff --git a/backend/tests/test-assets/learning-objects/test-multiple-choice/test-multiple-choice-example.ts b/backend/tests/test-assets/learning-objects/test-multiple-choice/test-multiple-choice-example.ts index a1888dfa..276a41bb 100644 --- a/backend/tests/test-assets/learning-objects/test-multiple-choice/test-multiple-choice-example.ts +++ b/backend/tests/test-assets/learning-objects/test-multiple-choice/test-multiple-choice-example.ts @@ -1,8 +1,8 @@ import { LearningObjectExample } from '../learning-object-example'; -import { Language } from 'dwengo-1-common/src/util/language'; import { LearningObject } from '../../../../src/entities/content/learning-object.entity'; import { loadTestAsset } from '../../../test-utils/load-test-asset'; import { envVars, getEnvVar } from '../../../../src/util/envVars'; +import { Language } from '../../../../src/entities/content/language'; import { DwengoContentType } from '../../../../src/services/learning-objects/processing/content-type'; const example: LearningObjectExample = { diff --git a/backend/tests/test-assets/learning-paths/learning-path-utils.ts b/backend/tests/test-assets/learning-paths/learning-path-utils.ts index 6195bf4c..eb786fe1 100644 --- a/backend/tests/test-assets/learning-paths/learning-path-utils.ts +++ b/backend/tests/test-assets/learning-paths/learning-path-utils.ts @@ -1,4 +1,4 @@ -import { Language } from 'dwengo-1-common/src/util/language'; +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'; import { LearningPath } from '../../../src/entities/content/learning-path.entity'; diff --git a/backend/tests/test-assets/learning-paths/pn-werking-example.ts b/backend/tests/test-assets/learning-paths/pn-werking-example.ts index 02ec7a85..06a29007 100644 --- a/backend/tests/test-assets/learning-paths/pn-werking-example.ts +++ b/backend/tests/test-assets/learning-paths/pn-werking-example.ts @@ -1,5 +1,5 @@ import { LearningPath } from '../../../src/entities/content/learning-path.entity'; -import { Language } from 'dwengo-1-common/src/util/language'; +import { Language } from '../../../src/entities/content/language'; import { envVars, getEnvVar } from '../../../src/util/envVars'; import { createLearningPathNode, createLearningPathTransition } from './learning-path-utils'; import { LearningPathNode } from '../../../src/entities/content/learning-path-node.entity'; diff --git a/backend/tests/test-assets/learning-paths/test-conditions-example.ts b/backend/tests/test-assets/learning-paths/test-conditions-example.ts index 8f3b31dd..b5e38c24 100644 --- a/backend/tests/test-assets/learning-paths/test-conditions-example.ts +++ b/backend/tests/test-assets/learning-paths/test-conditions-example.ts @@ -1,5 +1,5 @@ import { LearningPath } from '../../../src/entities/content/learning-path.entity'; -import { Language } from 'dwengo-1-common/src/util/language'; +import { Language } from '../../../src/entities/content/language'; import testMultipleChoiceExample from '../learning-objects/test-multiple-choice/test-multiple-choice-example'; import { dummyLearningObject } from '../learning-objects/dummy/dummy-learning-object-example'; import { createLearningPathNode, createLearningPathTransition } from './learning-path-utils'; diff --git a/backend/tests/test-utils/expectations.ts b/backend/tests/test-utils/expectations.ts index 2c2e5e9b..ef845975 100644 --- a/backend/tests/test-utils/expectations.ts +++ b/backend/tests/test-utils/expectations.ts @@ -2,7 +2,7 @@ import { AssertionError } from 'node:assert'; import { LearningObject } from '../../src/entities/content/learning-object.entity'; import { LearningPath as LearningPathEntity } from '../../src/entities/content/learning-path.entity'; import { expect } from 'vitest'; -import { FilteredLearningObject, LearningPath } from 'dwengo-1-common/src/interfaces/learning-content'; +import {FilteredLearningObject, LearningPath} from "dwengo-1-common/src/interfaces/learning-content"; // Ignored properties because they belang for example to the class, not to the entity itself. const IGNORE_PROPERTIES = ['parent']; @@ -12,13 +12,7 @@ const IGNORE_PROPERTIES = ['parent']; * @param actual The actual entity retrieved from the database * @param expected The (previously added) entity we would expect to retrieve */ -export function expectToBeCorrectEntity( - actual: { entity: T; name?: string }, - expected: { - entity: T; - name?: string; - } -): void { +export function expectToBeCorrectEntity(actual: { entity: T; name?: string }, expected: { entity: T; name?: string }): void { if (!actual.name) { actual.name = 'actual'; } diff --git a/backend/tests/test_assets/assignments/assignments.testdata.ts b/backend/tests/test_assets/assignments/assignments.testdata.ts index f1d2fdb4..8753b0ce 100644 --- a/backend/tests/test_assets/assignments/assignments.testdata.ts +++ b/backend/tests/test_assets/assignments/assignments.testdata.ts @@ -1,7 +1,7 @@ import { EntityManager } from '@mikro-orm/core'; -import { Language } from 'dwengo-1-common/src/util/language'; import { Assignment } from '../../../src/entities/assignments/assignment.entity'; import { Class } from '../../../src/entities/classes/class.entity'; +import { Language } from '../../../src/entities/content/language'; export function makeTestAssignemnts(em: EntityManager, classes: Class[]): Assignment[] { const assignment01 = em.create(Assignment, { diff --git a/backend/tests/test_assets/assignments/submission.testdata.ts b/backend/tests/test_assets/assignments/submission.testdata.ts index 434aa79a..4fca5f9b 100644 --- a/backend/tests/test_assets/assignments/submission.testdata.ts +++ b/backend/tests/test_assets/assignments/submission.testdata.ts @@ -1,6 +1,6 @@ import { EntityManager } from '@mikro-orm/core'; -import { Language } from 'dwengo-1-common/src/util/language'; import { Submission } from '../../../src/entities/assignments/submission.entity'; +import { Language } from '../../../src/entities/content/language'; import { Student } from '../../../src/entities/users/student.entity'; import { Group } from '../../../src/entities/assignments/group.entity'; diff --git a/backend/tests/test_assets/content/learning-objects.testdata.ts b/backend/tests/test_assets/content/learning-objects.testdata.ts index e4044102..bbca8830 100644 --- a/backend/tests/test_assets/content/learning-objects.testdata.ts +++ b/backend/tests/test_assets/content/learning-objects.testdata.ts @@ -1,6 +1,6 @@ import { EntityManager } from '@mikro-orm/core'; -import { Language } from 'dwengo-1-common/src/util/language'; import { LearningObject } from '../../../src/entities/content/learning-object.entity'; +import { Language } from '../../../src/entities/content/language'; import { DwengoContentType } from '../../../src/services/learning-objects/processing/content-type'; import { ReturnValue } from '../../../src/entities/content/return-value.entity'; diff --git a/backend/tests/test_assets/content/learning-paths.testdata.ts b/backend/tests/test_assets/content/learning-paths.testdata.ts index 98ade777..e41773cc 100644 --- a/backend/tests/test_assets/content/learning-paths.testdata.ts +++ b/backend/tests/test_assets/content/learning-paths.testdata.ts @@ -1,6 +1,6 @@ import { EntityManager } from '@mikro-orm/core'; -import { Language } from 'dwengo-1-common/src/util/language'; import { LearningPath } from '../../../src/entities/content/learning-path.entity'; +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'; diff --git a/backend/tests/test_assets/questions/questions.testdata.ts b/backend/tests/test_assets/questions/questions.testdata.ts index 2e994676..8604cf07 100644 --- a/backend/tests/test_assets/questions/questions.testdata.ts +++ b/backend/tests/test_assets/questions/questions.testdata.ts @@ -1,6 +1,6 @@ import { EntityManager } from '@mikro-orm/core'; -import { Language } from 'dwengo-1-common/src/util/language'; import { Question } from '../../../src/entities/questions/question.entity'; +import { Language } from '../../../src/entities/content/language'; import { Student } from '../../../src/entities/users/student.entity'; export function makeTestQuestions(em: EntityManager, students: Student[]): Question[] { diff --git a/common/src/interfaces/learning-content.d.ts b/common/src/interfaces/learning-content.d.ts index 02e49648..7db61a85 100644 --- a/common/src/interfaces/learning-content.d.ts +++ b/common/src/interfaces/learning-content.d.ts @@ -1,4 +1,4 @@ -import { Language } from '../util/language'; +import { Language } from 'dwengo-1-backend/src/entities/content/language.js' export interface Transition { default: boolean; From 04b35a61f99b4afc87df237a88540795cf34749e Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Wed, 2 Apr 2025 00:29:38 +0200 Subject: [PATCH 18/19] fix: tsconfig --- .../learning-objects/database-learning-object-provider.ts | 7 +++++-- backend/src/services/submissions.ts | 2 +- tsconfig.json | 8 +------- 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/backend/src/services/learning-objects/database-learning-object-provider.ts b/backend/src/services/learning-objects/database-learning-object-provider.ts index 5624fc19..d0099e1f 100644 --- a/backend/src/services/learning-objects/database-learning-object-provider.ts +++ b/backend/src/services/learning-objects/database-learning-object-provider.ts @@ -1,13 +1,16 @@ import { LearningObjectProvider } from './learning-object-provider.js'; import { getLearningObjectRepository, getLearningPathRepository } from '../../data/repositories.js'; -import { Language } from '../../entities/content/language.js'; import { LearningObject } from '../../entities/content/learning-object.entity.js'; import { getUrlStringForLearningObject } from '../../util/links.js'; import processingService from './processing/processing-service.js'; import { NotFoundError } from '@mikro-orm/core'; import learningObjectService from './learning-object-service.js'; import { getLogger, Logger } from '../../logging/initalize.js'; -import { FilteredLearningObject, LearningObjectIdentifier, LearningPathIdentifier } from 'dwengo-1-common/src/interfaces/learning-content'; +import { + FilteredLearningObject, + LearningObjectIdentifier, + LearningPathIdentifier, +} from 'dwengo-1-common/src/interfaces/learning-content'; const logger: Logger = getLogger(); diff --git a/backend/src/services/submissions.ts b/backend/src/services/submissions.ts index e5c040b6..314b9d65 100644 --- a/backend/src/services/submissions.ts +++ b/backend/src/services/submissions.ts @@ -1,4 +1,4 @@ -import { getGroupRepository, getSubmissionRepository } from '../data/repositories.js'; +import { getSubmissionRepository } from '../data/repositories.js'; import { Language } from '../entities/content/language.js'; import { LearningObjectIdentifier } from '../entities/content/learning-object-identifier.js'; import { mapToSubmission, mapToSubmissionDTO } from '../interfaces/submission.js'; diff --git a/tsconfig.json b/tsconfig.json index 11be2711..b41449cf 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -121,11 +121,5 @@ "skipLibCheck": true, /* Skip type checking all .d.ts files. */ "resolveJsonModule": true - }, - "files": [], - "references": [ - { "path": "backend" }, - { "path": "common" }, - { "path": "frontend" } - ] + } } From b6e07d28dfc32bfbcec1021f99eab228b2ce72bf Mon Sep 17 00:00:00 2001 From: Lint Action Date: Tue, 1 Apr 2025 22:40:33 +0000 Subject: [PATCH 19/19] style: fix linting issues met Prettier --- .../learning-objects/database-learning-object-provider.ts | 6 +----- .../database-learning-object-provider.test.ts | 2 +- .../learning-objects/learning-object-service.test.ts | 6 +++--- .../learning-path/database-learning-path-provider.test.ts | 2 +- backend/tests/test-utils/expectations.ts | 2 +- common/src/interfaces/learning-content.d.ts | 2 +- 6 files changed, 8 insertions(+), 12 deletions(-) diff --git a/backend/src/services/learning-objects/database-learning-object-provider.ts b/backend/src/services/learning-objects/database-learning-object-provider.ts index d0099e1f..0639782c 100644 --- a/backend/src/services/learning-objects/database-learning-object-provider.ts +++ b/backend/src/services/learning-objects/database-learning-object-provider.ts @@ -6,11 +6,7 @@ import processingService from './processing/processing-service.js'; import { NotFoundError } from '@mikro-orm/core'; import learningObjectService from './learning-object-service.js'; import { getLogger, Logger } from '../../logging/initalize.js'; -import { - FilteredLearningObject, - LearningObjectIdentifier, - LearningPathIdentifier, -} from 'dwengo-1-common/src/interfaces/learning-content'; +import { FilteredLearningObject, LearningObjectIdentifier, LearningPathIdentifier } from 'dwengo-1-common/src/interfaces/learning-content'; const logger: Logger = getLogger(); diff --git a/backend/tests/services/learning-objects/database-learning-object-provider.test.ts b/backend/tests/services/learning-objects/database-learning-object-provider.test.ts index 03248c55..e87c158b 100644 --- a/backend/tests/services/learning-objects/database-learning-object-provider.test.ts +++ b/backend/tests/services/learning-objects/database-learning-object-provider.test.ts @@ -9,7 +9,7 @@ import { Language } from '../../../src/entities/content/language'; import learningObjectExample from '../../test-assets/learning-objects/pn-werkingnotebooks/pn-werkingnotebooks-example'; import learningPathExample from '../../test-assets/learning-paths/pn-werking-example'; import { LearningPath } from '../../../src/entities/content/learning-path.entity'; -import {FilteredLearningObject} from "dwengo-1-common/src/interfaces/learning-content"; +import { FilteredLearningObject } from 'dwengo-1-common/src/interfaces/learning-content'; async function initExampleData(): Promise<{ learningObject: LearningObject; learningPath: LearningPath }> { const learningObjectRepo = getLearningObjectRepository(); diff --git a/backend/tests/services/learning-objects/learning-object-service.test.ts b/backend/tests/services/learning-objects/learning-object-service.test.ts index abcae538..2e96c4fc 100644 --- a/backend/tests/services/learning-objects/learning-object-service.test.ts +++ b/backend/tests/services/learning-objects/learning-object-service.test.ts @@ -73,18 +73,18 @@ describe('LearningObjectService', () => { }); it( 'returns the same HTML as the Dwengo API when queried with the identifier of a learning object that does ' + - 'not start with the user content prefix', + 'not start with the user content prefix', async () => { const result = await learningObjectService.getLearningObjectHTML(DWENGO_TEST_LEARNING_OBJECT_ID); expect(result).not.toBeNull(); const responseFromDwengoApi = await fetch( getEnvVar(envVars.LearningContentRepoApiBaseUrl) + - `/learningObject/getRaw?hruid=${DWENGO_TEST_LEARNING_OBJECT_ID.hruid}&language=${DWENGO_TEST_LEARNING_OBJECT_ID.language}&version=${DWENGO_TEST_LEARNING_OBJECT_ID.version}`, + `/learningObject/getRaw?hruid=${DWENGO_TEST_LEARNING_OBJECT_ID.hruid}&language=${DWENGO_TEST_LEARNING_OBJECT_ID.language}&version=${DWENGO_TEST_LEARNING_OBJECT_ID.version}` ); const responseHtml = await responseFromDwengoApi.text(); expect(result).toEqual(responseHtml); - }, + } ); it('returns null when queried with a non-existing identifier', async () => { const result = await learningObjectService.getLearningObjectHTML({ diff --git a/backend/tests/services/learning-path/database-learning-path-provider.test.ts b/backend/tests/services/learning-path/database-learning-path-provider.test.ts index 30e07a5a..7b1f2bf8 100644 --- a/backend/tests/services/learning-path/database-learning-path-provider.test.ts +++ b/backend/tests/services/learning-path/database-learning-path-provider.test.ts @@ -20,7 +20,7 @@ import { } from '../../test-assets/learning-paths/test-conditions-example.js'; import { Student } from '../../../src/entities/users/student.entity.js'; -import {LearningObjectNode, LearningPathResponse} from "dwengo-1-common/src/interfaces/learning-content"; +import { LearningObjectNode, LearningPathResponse } from 'dwengo-1-common/src/interfaces/learning-content'; async function initExampleData(): Promise<{ learningObject: LearningObject; learningPath: LearningPath }> { const learningObjectRepo = getLearningObjectRepository(); diff --git a/backend/tests/test-utils/expectations.ts b/backend/tests/test-utils/expectations.ts index ef845975..374bf6a7 100644 --- a/backend/tests/test-utils/expectations.ts +++ b/backend/tests/test-utils/expectations.ts @@ -2,7 +2,7 @@ import { AssertionError } from 'node:assert'; import { LearningObject } from '../../src/entities/content/learning-object.entity'; import { LearningPath as LearningPathEntity } from '../../src/entities/content/learning-path.entity'; import { expect } from 'vitest'; -import {FilteredLearningObject, LearningPath} from "dwengo-1-common/src/interfaces/learning-content"; +import { FilteredLearningObject, LearningPath } from 'dwengo-1-common/src/interfaces/learning-content'; // Ignored properties because they belang for example to the class, not to the entity itself. const IGNORE_PROPERTIES = ['parent']; diff --git a/common/src/interfaces/learning-content.d.ts b/common/src/interfaces/learning-content.d.ts index 7db61a85..610b1385 100644 --- a/common/src/interfaces/learning-content.d.ts +++ b/common/src/interfaces/learning-content.d.ts @@ -1,4 +1,4 @@ -import { Language } from 'dwengo-1-backend/src/entities/content/language.js' +import { Language } from 'dwengo-1-backend/src/entities/content/language.js'; export interface Transition { default: boolean;