Files
lms-be/src/curriculum/curriculum.controller.ts
T

70 lines
2.0 KiB
TypeScript

import { Body, Controller, Delete, Get, Param, Post, Query, Req, Res } from '@nestjs/common';
import { Request, Response } from 'express';
import { CurriculumService } from './curriculum.service';
@Controller('curriculum')
export class CurriculumController {
constructor(private readonly curriculumService: CurriculumService) {}
@Get()
getActiveCurriculum(@Req() request: Request, @Query('courseId') courseId?: string) {
return this.curriculumService.getActiveCurriculum(
this.getBearerToken(request),
courseId,
);
}
@Post('custom-modules')
createCustomModule(
@Req() request: Request,
@Body() body: {
courseId?: string;
week?: number;
name?: string;
category?: string;
dockerImage?: string;
packageName?: string;
launchFile?: string;
runtimeTarget?: string;
},
) {
return this.curriculumService.createCustomModule(this.getBearerToken(request), body);
}
@Delete('custom-modules/:moduleId')
deleteCustomModule(
@Req() request: Request,
@Param('moduleId') moduleId: string,
@Query('courseId') courseId?: string,
) {
return this.curriculumService.deleteCustomModule(this.getBearerToken(request), moduleId, courseId);
}
@Get('courses')
listCourses(@Req() request: Request) {
return this.curriculumService.listCourses(this.getBearerToken(request));
}
@Get('references/:referenceId/download')
async downloadReference(
@Req() request: Request,
@Param('referenceId') referenceId: string,
@Res() response: Response,
) {
const download = await this.curriculumService.getReferenceDownload(
this.getBearerToken(request),
referenceId,
);
if (download.url) return response.redirect(download.url);
response.setHeader('content-type', download.contentType);
return response.download(download.path, download.fileName);
}
private getBearerToken(request: Request): string | undefined {
const [type, token] = request.headers.authorization?.split(' ') ?? [];
return type === 'Bearer' ? token : undefined;
}
}