69 lines
2.0 KiB
TypeScript
69 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;
|
|
},
|
|
) {
|
|
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;
|
|
}
|
|
}
|