feat(backend): Endpoints voor het verwijderen van leerobjecten

This commit is contained in:
Gerald Schmittinger 2025-05-12 14:35:55 +02:00
parent db92eff759
commit a7f90aace3
3 changed files with 37 additions and 0 deletions

View file

@ -92,3 +92,22 @@ export async function handlePostLearningObject(req: AuthenticatedRequest, res: R
);
res.json(learningObject);
}
export async function handleDeleteLearningObject(req: AuthenticatedRequest, res: Response): Promise<void> {
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");
}
}

View file

@ -42,4 +42,13 @@ export class LearningObjectRepository extends DwengoEntityRepository<LearningObj
{ populate: ['admins'] } // Make sure to load admin relations
);
}
public async removeByIdentifier(identifier: LearningObjectIdentifier): Promise<LearningObject | null> {
const learningObject = await this.findByIdentifier(identifier);
if (learningObject) {
await this.em.removeAndFlush(learningObject);
}
return learningObject;
}
}

View file

@ -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<LearningObject | null> {
const learningObjectRepository = getLearningObjectRepository();
return await learningObjectRepository.removeByIdentifier(id);
}
};