final fix

This commit is contained in:
2025-08-27 21:03:45 +03:00
parent 400d97f1ff
commit beb033bb6f
4 changed files with 71 additions and 5 deletions

43
package-lock.json generated
View File

@@ -10,6 +10,7 @@
"license": "UNLICENSED", "license": "UNLICENSED",
"dependencies": { "dependencies": {
"@nestjs/common": "^11.0.1", "@nestjs/common": "^11.0.1",
"@nestjs/config": "^4.0.2",
"@nestjs/core": "^11.0.1", "@nestjs/core": "^11.0.1",
"@nestjs/platform-express": "^11.1.6", "@nestjs/platform-express": "^11.1.6",
"@nestjs/platform-socket.io": "^11.1.6", "@nestjs/platform-socket.io": "^11.1.6",
@@ -2347,6 +2348,33 @@
} }
} }
}, },
"node_modules/@nestjs/config": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/@nestjs/config/-/config-4.0.2.tgz",
"integrity": "sha512-McMW6EXtpc8+CwTUwFdg6h7dYcBUpH5iUILCclAsa+MbCEvC9ZKu4dCHRlJqALuhjLw97pbQu62l4+wRwGeZqA==",
"license": "MIT",
"dependencies": {
"dotenv": "16.4.7",
"dotenv-expand": "12.0.1",
"lodash": "4.17.21"
},
"peerDependencies": {
"@nestjs/common": "^10.0.0 || ^11.0.0",
"rxjs": "^7.1.0"
}
},
"node_modules/@nestjs/config/node_modules/dotenv": {
"version": "16.4.7",
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz",
"integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==",
"license": "BSD-2-Clause",
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://dotenvx.com"
}
},
"node_modules/@nestjs/core": { "node_modules/@nestjs/core": {
"version": "11.1.6", "version": "11.1.6",
"resolved": "https://registry.npmjs.org/@nestjs/core/-/core-11.1.6.tgz", "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-11.1.6.tgz",
@@ -5164,6 +5192,21 @@
"url": "https://dotenvx.com" "url": "https://dotenvx.com"
} }
}, },
"node_modules/dotenv-expand": {
"version": "12.0.1",
"resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-12.0.1.tgz",
"integrity": "sha512-LaKRbou8gt0RNID/9RoI+J2rvXsBRPMV7p+ElHlPhcSARbCPDYcYG2s1TIzAfWv4YSgyY5taidWzzs31lNV3yQ==",
"license": "BSD-2-Clause",
"dependencies": {
"dotenv": "^16.4.5"
},
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://dotenvx.com"
}
},
"node_modules/dunder-proto": { "node_modules/dunder-proto": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",

View File

@@ -21,6 +21,7 @@
}, },
"dependencies": { "dependencies": {
"@nestjs/common": "^11.0.1", "@nestjs/common": "^11.0.1",
"@nestjs/config": "^4.0.2",
"@nestjs/core": "^11.0.1", "@nestjs/core": "^11.0.1",
"@nestjs/platform-express": "^11.1.6", "@nestjs/platform-express": "^11.1.6",
"@nestjs/platform-socket.io": "^11.1.6", "@nestjs/platform-socket.io": "^11.1.6",

View File

@@ -4,8 +4,9 @@ import { ApiTags } from '@nestjs/swagger';
import { PrismaService } from './services/prisma.service'; import { PrismaService } from './services/prisma.service';
import { FileInterceptor } from '@nestjs/platform-express'; import { FileInterceptor } from '@nestjs/platform-express';
import { diskStorage } from 'multer'; import { diskStorage } from 'multer';
import { extname } from 'path'; import { extname, join } from 'path';
import { AppGetaway } from './app.getaway'; import { AppGetaway } from './app.getaway';
import { unlink } from 'fs';
@ApiTags('App') @ApiTags('App')
@Controller('app') @Controller('app')
@@ -14,8 +15,8 @@ export class AppController {
@Get('candidates') @Get('candidates')
getCandidateList() { async getCandidateList() {
return this.prisma.candidate.findMany({ const data = await this.prisma.candidate.findMany({
select: { select: {
id: true, id: true,
fullName: true, fullName: true,
@@ -24,11 +25,21 @@ export class AppController {
profileImage: true, profileImage: true,
} }
}) })
data.forEach((candidate) => {
candidate.profileImage = `${process.env.HOST_URL as string}/uploads/${candidate.profileImage}`;
})
return data;
} }
@Get('candidate/:id') @Get('candidate/:id')
getCandidateDetails(@Param('id', ParseIntPipe) id: number) { async getCandidateDetails(@Param('id', ParseIntPipe) id: number) {
return this.prisma.candidate.findFirst({ where: { id: id } }); const data = await this.prisma.candidate.findFirst({ where: { id: id } });
if (!data) {
throw new NotFoundException();
}
data.profileImage = `${process.env.HOST_URL as string}/uploads/${data.profileImage}`;
return data;
} }
@@ -105,6 +116,15 @@ export class AppController {
await this.prisma.candidate.delete({ where: { id } }); await this.prisma.candidate.delete({ where: { id } });
if (candidate.profileImage) {
const filePath = join(process.cwd(), 'assets', 'uploads', candidate.profileImage);
unlink(filePath, (err) => {
if (err) {
console.error('Failed to delete file:', err);
}
});
}
this.socketService.onDeleteCandidate(id); this.socketService.onDeleteCandidate(id);
return candidate; return candidate;

View File

@@ -6,9 +6,11 @@ import { PrismaService } from './services/prisma.service';
import { AppGetaway } from './app.getaway'; import { AppGetaway } from './app.getaway';
import { StatsController } from './stats.controller'; import { StatsController } from './stats.controller';
import { StatsService } from './services/stats.service'; import { StatsService } from './services/stats.service';
import { ConfigModule } from '@nestjs/config';
@Module({ @Module({
imports: [ imports: [
ConfigModule.forRoot(),
ServeStaticModule.forRoot( ServeStaticModule.forRoot(
{ {
rootPath: join(__dirname, 'assets/client'), rootPath: join(__dirname, 'assets/client'),