feat(backend): PUSH, PUT en DELETE endpoints voor leerpaden aangemaakt.
This commit is contained in:
parent
20c04370b5
commit
30ca3b70de
8 changed files with 186 additions and 44 deletions
|
@ -1,7 +1,7 @@
|
|||
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 { LearningObjectNode, LearningPath, LearningPathResponse } from '@dwengo-1/common/interfaces/learning-content';
|
||||
import { LearningObjectNode, LearningPath, LearningPathIdentifier, LearningPathResponse } from '@dwengo-1/common/interfaces/learning-content';
|
||||
import { Language } from '@dwengo-1/common/util/language';
|
||||
import { Group } from '../../entities/assignments/group.entity.js';
|
||||
import { LearningPath as LearningPathEntity } from '../../entities/content/learning-path.entity.js';
|
||||
|
@ -12,6 +12,7 @@ import { base64ToArrayBuffer } from '../../util/base64-buffer-conversion.js';
|
|||
import { TeacherDTO } from '@dwengo-1/common/interfaces/teacher';
|
||||
import { mapToTeacher } from '../../interfaces/teacher.js';
|
||||
import { Collection } from '@mikro-orm/core';
|
||||
import { NotFoundException } from '../../exceptions/not-found-exception.js';
|
||||
|
||||
const userContentPrefix = getEnvVar(envVars.UserContentPrefix);
|
||||
const allProviders = [dwengoApiLearningPathProvider, databaseLearningPathProvider];
|
||||
|
@ -105,6 +106,16 @@ const learningPathService = {
|
|||
};
|
||||
},
|
||||
|
||||
/**
|
||||
* Fetch the learning paths administrated by the teacher with the given username.
|
||||
*/
|
||||
async getLearningPathsAdministratedBy(adminUsername: string): Promise<LearningPath[]> {
|
||||
const providerResponses = await Promise.all(
|
||||
allProviders.map(async (provider) => provider.getLearningPathsAdministratedBy(adminUsername))
|
||||
);
|
||||
return providerResponses.flat();
|
||||
},
|
||||
|
||||
/**
|
||||
* Search learning paths in the data source using the given search string.
|
||||
*/
|
||||
|
@ -119,12 +130,42 @@ const learningPathService = {
|
|||
* Add a new learning path to the database.
|
||||
* @param dto Learning path DTO from which the learning path will be created.
|
||||
* @param admins Teachers who should become an admin of the learning path.
|
||||
* @param allowReplace If this is set to true and there is already a learning path with the same identifier, it is replaced.
|
||||
* @returns the created learning path.
|
||||
*/
|
||||
async createNewLearningPath(dto: LearningPath, admins: TeacherDTO[]): Promise<void> {
|
||||
async createNewLearningPath(dto: LearningPath, admins: TeacherDTO[], allowReplace = false): Promise<LearningPathEntity> {
|
||||
const repo = getLearningPathRepository();
|
||||
const path = mapToLearningPath(dto, admins);
|
||||
await repo.save(path, { preventOverwrite: true });
|
||||
await repo.save(path, { preventOverwrite: allowReplace });
|
||||
return path;
|
||||
},
|
||||
|
||||
/**
|
||||
* Deletes the learning path with the given identifier from the database.
|
||||
* @param id Identifier of the learning path to delete.
|
||||
* @returns the deleted learning path.
|
||||
*/
|
||||
async deleteLearningPath(id: LearningPathIdentifier): Promise<LearningPathEntity> {
|
||||
const repo = getLearningPathRepository();
|
||||
const deletedPath = await repo.deleteByHruidAndLanguage(id.hruid, id.language);
|
||||
if (deletedPath) {
|
||||
return deletedPath;
|
||||
}
|
||||
throw new NotFoundException("No learning path with the given identifier found.");
|
||||
},
|
||||
|
||||
/**
|
||||
* Returns a list of the usernames of the administrators of the learning path with the given identifier.
|
||||
* @param id The identifier of the learning path whose admins should be fetched.
|
||||
*/
|
||||
async getAdmins(id: LearningPathIdentifier): Promise<string[]> {
|
||||
const repo = getLearningPathRepository();
|
||||
const path = await repo.findByHruidAndLanguage(id.hruid, id.language);
|
||||
if (!path) {
|
||||
throw new NotFoundException("No learning path with the given identifier found.");
|
||||
}
|
||||
return path.admins.map(admin => admin.username);
|
||||
}
|
||||
};
|
||||
|
||||
export default learningPathService;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue