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
Loading
......@@ -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