Skip to content
Snippets Groups Projects
Commit e6d3b32a authored by Amine's avatar Amine
Browse files

modifications pour rajouter le pdf

parent b64f7ddf
No related branches found
No related tags found
1 merge request!8Pdfback
......@@ -105,3 +105,6 @@ dist
# config files
config.json
# file where we store pdf
internship-agreements/
\ No newline at end of file
......@@ -29,6 +29,7 @@
"@types/jest": "28.1.8",
"@types/node": "^16.0.0",
"@types/supertest": "^2.0.11",
"@types/uuid": "^9.0.0",
"@typescript-eslint/eslint-plugin": "^5.0.0",
"@typescript-eslint/parser": "^5.0.0",
"cross-env": "^7.0.3",
......@@ -3138,6 +3139,12 @@
"@types/superagent": "*"
}
},
"node_modules/@types/uuid": {
"version": "9.0.0",
"resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.0.tgz",
"integrity": "sha512-kr90f+ERiQtKWMz5rP32ltJ/BtULDI5RVO0uavn1HQUOwjx0R1h0rnDYNL0CepF1zL5bSY6FISAfd9tOdDhU5Q==",
"dev": true
},
"node_modules/@types/webidl-conversions": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
......@@ -12456,6 +12463,12 @@
"@types/superagent": "*"
}
},
"@types/uuid": {
"version": "9.0.0",
"resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.0.tgz",
"integrity": "sha512-kr90f+ERiQtKWMz5rP32ltJ/BtULDI5RVO0uavn1HQUOwjx0R1h0rnDYNL0CepF1zL5bSY6FISAfd9tOdDhU5Q==",
"dev": true
},
"@types/webidl-conversions": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
......
export interface IServerConfig {
url: string;
port: number;
}
......
{
"server": {
"uri": "localhost",
"url": "localhost",
"port": 3001
},
"mongodb": {
......
{
"server": {
"url": "localhost",
"port": 3001
},
"mongodb": {
......
......@@ -7,7 +7,7 @@ import { exit } from 'process';
const CONFIG_DEV = 'config.json';
const CONFIG_PROD = 'config.prod.json';
let config;
let config: IConfig;
// Load config based on env
switch (process.env.NODE_ENV) {
case 'dev':
......
......@@ -121,7 +121,7 @@ export class InternshipDao {
): Promise<Internship | void> =>
new Promise((resolve, reject) => {
if (!isStateValid(state)) reject(BAD_REQUEST);
console.log(typeof content);
console.log(content);
let nextState: string, contentHolder: string;
let valid = false;
switch (state) {
......
......@@ -7,13 +7,23 @@ import {
Param,
Body,
UseInterceptors,
UploadedFile,
} from '@nestjs/common';
import { BAD_TRACKING_STATE } from 'src/shared/HttpError';
import { BAD_REQUEST, BAD_TRACKING_STATE } from 'src/shared/HttpError';
import * as InternshipStates from 'src/shared/InternshipState';
import { HttpInterceptor } from '../interceptors/http.interceptor';
import { CreateInternshipDto } from './dto/create-internship.dto';
import { InternshipEntity } from './entities/internship.entity';
import { InternshipService } from './internships.service';
import { FileInterceptor } from '@nestjs/platform-express';
import * as path from 'path';
import {
STATE_RESPONSIBLE_ACCEPTS_INTERNSHIP_INFORMATION,
STATE_STUDENT_ENTERS_INTERNSHIP_INFORMATION,
} from 'src/shared/InternshipState';
import config from 'src/config';
import { Optional } from '@nestjs/common/decorators';
import { v4 } from 'uuid';
@Controller('internships')
@UseInterceptors(HttpInterceptor)
......@@ -47,18 +57,53 @@ export class InternshipsController {
return this._internshipsService.update(params.studentId, internshipDto);
}
@Put(':studentId/tracking')
@Put(':studentId/:state')
@UseInterceptors(
FileInterceptor('pdf', {
dest: './internship-agreements',
fileFilter: (req, file, cb) => {
file.filename = `${v4()}.pdf`;
cb(null, true);
},
}),
)
updateState(
@Param() params: { studentId: string },
@Body() body: { state: string; content?: string | boolean },
@Param() params: { studentId: string; state: string },
@Optional() @Body() body: { content?: boolean },
@Optional() @UploadedFile() file,
): Promise<InternshipEntity | void> {
if (!InternshipStates.isStateValid(body.state))
throw BAD_TRACKING_STATE(body.state);
if (!InternshipStates.isStateValid(params.state))
throw BAD_TRACKING_STATE(params.state);
// AMINE : Handle PDF file upload -> save file in /pdf/ folder and set content as local file URL. In case of step with no file, set content as true/false
//case where there isn't a file
//Deux premiers états
if (
params.state === STATE_STUDENT_ENTERS_INTERNSHIP_INFORMATION ||
params.state === STATE_RESPONSIBLE_ACCEPTS_INTERNSHIP_INFORMATION
) {
if (!body) throw BAD_REQUEST;
return this._internshipsService.updateTracking(
params.studentId,
params.state,
body.content,
);
}
//case where there is a file
if (!file) throw BAD_REQUEST;
console.log(file);
console.log(config);
return this._internshipsService.updateTracking(
params.studentId,
body.state,
body.content,
params.state,
path.join(
`${config.server.url}:${config.server.port}`,
file.path,
file.fieldname,
),
);
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment