feat(backend): Added endpoint to fetch HTML version of learning object (from Dwengo backend)
Also refactored a bit to make this easier.
This commit is contained in:
		
							parent
							
								
									770c5c9879
								
							
						
					
					
						commit
						18ee991ce3
					
				
					 16 changed files with 264 additions and 178 deletions
				
			
		
							
								
								
									
										62
									
								
								backend/src/controllers/learning-objects.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								backend/src/controllers/learning-objects.ts
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,62 @@
 | 
			
		|||
import { Request, Response } from 'express';
 | 
			
		||||
import { FALLBACK_LANG } from '../config.js';
 | 
			
		||||
import {FilteredLearningObject, LearningObjectIdentifier, LearningPathIdentifier} from '../interfaces/learning-content';
 | 
			
		||||
import learningObjectService from "../services/learning-content/learning-object-service";
 | 
			
		||||
import {EnvVars, getEnvVar} from "../util/envvars";
 | 
			
		||||
import {Language} from "../entities/content/language";
 | 
			
		||||
import {BadRequestException} from "../exceptions";
 | 
			
		||||
 | 
			
		||||
function getLearningObjectIdentifierFromRequest(req: Request): LearningObjectIdentifier {
 | 
			
		||||
    if (!req.params.hruid) {
 | 
			
		||||
        throw new BadRequestException("HRUID is required.");
 | 
			
		||||
    }
 | 
			
		||||
    return {
 | 
			
		||||
        hruid: req.params.hruid as string,
 | 
			
		||||
        language: (req.query.language || getEnvVar(EnvVars.FallbackLanguage)) as Language,
 | 
			
		||||
        version: req.query.version as string
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function getLearningPathIdentifierFromRequest(req: Request): LearningPathIdentifier {
 | 
			
		||||
    if (!req.query.hruid) {
 | 
			
		||||
        throw new BadRequestException("HRUID is required.");
 | 
			
		||||
    }
 | 
			
		||||
    return {
 | 
			
		||||
        hruid: req.params.hruid as string,
 | 
			
		||||
        language: (req.query.language as Language) || FALLBACK_LANG
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export async function getAllLearningObjects(
 | 
			
		||||
    req: Request,
 | 
			
		||||
    res: Response
 | 
			
		||||
): Promise<void> {
 | 
			
		||||
    const learningPathId = getLearningPathIdentifierFromRequest(req);
 | 
			
		||||
    const full = req.query.full;
 | 
			
		||||
 | 
			
		||||
    let learningObjects: FilteredLearningObject[] | string[];
 | 
			
		||||
    if (full) {
 | 
			
		||||
        learningObjects = await learningObjectService.getLearningObjectsFromPath(learningPathId);
 | 
			
		||||
    } else {
 | 
			
		||||
        learningObjects = await learningObjectService.getLearningObjectIdsFromPath(learningPathId);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    res.json(learningObjects);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export async function getLearningObject(
 | 
			
		||||
    req: Request,
 | 
			
		||||
    res: Response
 | 
			
		||||
): Promise<void> {
 | 
			
		||||
    const learningObjectId = getLearningObjectIdentifierFromRequest(req);
 | 
			
		||||
 | 
			
		||||
    const learningObject = await learningObjectService.getLearningObjectById(learningObjectId);
 | 
			
		||||
    res.json(learningObject);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export async function getLearningObjectHTML(req: Request, res: Response): Promise<void> {
 | 
			
		||||
    const learningObjectId = getLearningObjectIdentifierFromRequest(req);
 | 
			
		||||
 | 
			
		||||
    const learningObject = await learningObjectService.getLearningObjectHTML(learningObjectId);
 | 
			
		||||
    res.send(learningObject);
 | 
			
		||||
}
 | 
			
		||||
		Reference in a new issue