From a7f90aace38437afc9c8966699bb2c7217b5e30b Mon Sep 17 00:00:00 2001 From: Gerald Schmittinger Date: Mon, 12 May 2025 14:35:55 +0200 Subject: [PATCH] feat(backend): Endpoints voor het verwijderen van leerobjecten --- backend/src/controllers/learning-objects.ts | 19 +++++++++++++++++++ .../content/learning-object-repository.ts | 9 +++++++++ .../learning-object-service.ts | 9 +++++++++ 3 files changed, 37 insertions(+) diff --git a/backend/src/controllers/learning-objects.ts b/backend/src/controllers/learning-objects.ts index ba8fdef3..967ce355 100644 --- a/backend/src/controllers/learning-objects.ts +++ b/backend/src/controllers/learning-objects.ts @@ -92,3 +92,22 @@ export async function handlePostLearningObject(req: AuthenticatedRequest, res: R ); res.json(learningObject); } + +export async function handleDeleteLearningObject(req: AuthenticatedRequest, res: Response): Promise { + const learningObjectId = getLearningObjectIdentifierFromRequest(req); + + if (!learningObjectId.version) { + throw new BadRequestException("When deleting a learning object, a version must be specified."); + } + + const deletedLearningObject = await learningObjectService.deleteLearningObject({ + hruid: learningObjectId.hruid, + version: learningObjectId.version, + language: learningObjectId.language + }); + if (deletedLearningObject) { + res.json(deletedLearningObject); + } else { + throw new NotFoundException("Learning object not found"); + } +} diff --git a/backend/src/data/content/learning-object-repository.ts b/backend/src/data/content/learning-object-repository.ts index 1dd7c9e0..889370d5 100644 --- a/backend/src/data/content/learning-object-repository.ts +++ b/backend/src/data/content/learning-object-repository.ts @@ -42,4 +42,13 @@ export class LearningObjectRepository extends DwengoEntityRepository { + const learningObject = await this.findByIdentifier(identifier); + if (learningObject) { + await this.em.removeAndFlush(learningObject); + } + return learningObject; + } + } diff --git a/backend/src/services/learning-objects/learning-object-service.ts b/backend/src/services/learning-objects/learning-object-service.ts index 0a229fde..4ada879b 100644 --- a/backend/src/services/learning-objects/learning-object-service.ts +++ b/backend/src/services/learning-objects/learning-object-service.ts @@ -10,6 +10,7 @@ import { import {getLearningObjectRepository, getTeacherRepository} from "../../data/repositories"; import {processLearningObjectZip} from "./learning-object-zip-processing-service"; import {LearningObject} from "../../entities/content/learning-object.entity"; +import { LearningObjectIdentifier } from '../../entities/content/learning-object-identifier.js'; function getProvider(id: LearningObjectIdentifierDTO): LearningObjectProvider { if (id.hruid.startsWith(getEnvVar(envVars.UserContentPrefix))) { @@ -83,6 +84,14 @@ const learningObjectService = { await learningObjectRepository.save(learningObject, {preventOverwrite: true}); return learningObject; + }, + + /** + * Deletes the learning object with the given identifier. + */ + async deleteLearningObject(id: LearningObjectIdentifier): Promise { + const learningObjectRepository = getLearningObjectRepository(); + return await learningObjectRepository.removeByIdentifier(id); } };