minio
This commit is contained in:
1708
package-lock.json
generated
1708
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -20,7 +20,9 @@
|
|||||||
"test:e2e": "jest --config ./test/jest-e2e.json"
|
"test:e2e": "jest --config ./test/jest-e2e.json"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@aws-sdk/client-s3": "^3.1008.0",
|
||||||
"@nestjs/common": "^11.0.1",
|
"@nestjs/common": "^11.0.1",
|
||||||
|
"@nestjs/config": "^4.0.3",
|
||||||
"@nestjs/core": "^11.0.1",
|
"@nestjs/core": "^11.0.1",
|
||||||
"@nestjs/platform-express": "^11.0.1",
|
"@nestjs/platform-express": "^11.0.1",
|
||||||
"puppeteer-core": "^24.39.0",
|
"puppeteer-core": "^24.39.0",
|
||||||
|
|||||||
@@ -2,9 +2,18 @@ import { Module } from '@nestjs/common';
|
|||||||
import { AppController } from './app.controller';
|
import { AppController } from './app.controller';
|
||||||
import { AppService } from './app.service';
|
import { AppService } from './app.service';
|
||||||
import { PdfModule } from './pdf/pdf.module';
|
import { PdfModule } from './pdf/pdf.module';
|
||||||
|
import { StorageModule } from './storage/storage.module';
|
||||||
|
import { ConfigModule } from '@nestjs/config';
|
||||||
|
|
||||||
@Module({
|
@Module({
|
||||||
imports: [PdfModule],
|
imports: [
|
||||||
|
PdfModule
|
||||||
|
, StorageModule
|
||||||
|
, ConfigModule.forRoot({
|
||||||
|
envFilePath: ['.env'],
|
||||||
|
isGlobal: true,
|
||||||
|
}),
|
||||||
|
],
|
||||||
controllers: [AppController],
|
controllers: [AppController],
|
||||||
providers: [AppService],
|
providers: [AppService],
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
import { Module } from '@nestjs/common';
|
import { Module } from '@nestjs/common';
|
||||||
import { PdfController } from './pdf.controller';
|
import { PdfController } from './pdf.controller';
|
||||||
import { PdfService } from './pdf.service';
|
import { PdfService } from './pdf.service';
|
||||||
|
import { StorageModule } from 'src/storage/storage.module';
|
||||||
|
|
||||||
@Module({
|
@Module({
|
||||||
controllers: [PdfController],
|
controllers: [PdfController],
|
||||||
providers: [PdfService]
|
providers: [PdfService],
|
||||||
|
imports: [StorageModule]
|
||||||
})
|
})
|
||||||
export class PdfModule {}
|
export class PdfModule {}
|
||||||
|
|||||||
@@ -1,9 +1,13 @@
|
|||||||
import { Injectable } from '@nestjs/common';
|
import { Injectable } from '@nestjs/common';
|
||||||
import puppeteer from 'puppeteer-core';
|
import puppeteer from 'puppeteer-core';
|
||||||
import { KeyHandoverDto } from 'src/model/key-handover.dto';
|
import { KeyHandoverDto } from 'src/model/key-handover.dto';
|
||||||
|
import { MinioService } from 'src/storage/minio/minio.service';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class PdfService {
|
export class PdfService {
|
||||||
|
|
||||||
|
constructor(private minioService: MinioService) {}
|
||||||
|
|
||||||
async generateTestPdf(): Promise<Buffer> {
|
async generateTestPdf(): Promise<Buffer> {
|
||||||
const browser = await puppeteer.launch({
|
const browser = await puppeteer.launch({
|
||||||
executablePath: process.env.PUPPETEER_EXECUTABLE_PATH || '/usr/bin/chromium',
|
executablePath: process.env.PUPPETEER_EXECUTABLE_PATH || '/usr/bin/chromium',
|
||||||
@@ -68,7 +72,7 @@ export class PdfService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async generatePdf(dto: KeyHandoverDto): Promise<Buffer> {
|
async generatePdf(dto: KeyHandoverDto): Promise<string> {
|
||||||
const browser = await puppeteer.launch({
|
const browser = await puppeteer.launch({
|
||||||
executablePath: process.env.PUPPETEER_EXECUTABLE_PATH || '/usr/bin/chromium',
|
executablePath: process.env.PUPPETEER_EXECUTABLE_PATH || '/usr/bin/chromium',
|
||||||
headless: true,
|
headless: true,
|
||||||
@@ -110,9 +114,10 @@ export class PdfService {
|
|||||||
</div>
|
</div>
|
||||||
`,
|
`,
|
||||||
});
|
});
|
||||||
|
const fileName = crypto.randomUUID();
|
||||||
const buffer = Buffer.from(pdf);
|
const buffer = Buffer.from(pdf);
|
||||||
return buffer;
|
this.minioService.uploadPdf('keyvault-pro', fileName, buffer)
|
||||||
|
return fileName;
|
||||||
} finally {
|
} finally {
|
||||||
await browser.close();
|
await browser.close();
|
||||||
}
|
}
|
||||||
|
|||||||
33
src/storage/minio/minio.service.ts
Normal file
33
src/storage/minio/minio.service.ts
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
import { Injectable } from '@nestjs/common';
|
||||||
|
import { ConfigService } from '@nestjs/config';
|
||||||
|
import { PutObjectCommand, S3Client } from '@aws-sdk/client-s3';
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class MinioService {
|
||||||
|
private readonly client: S3Client;
|
||||||
|
|
||||||
|
constructor(private configService: ConfigService) {
|
||||||
|
this.client = new S3Client({
|
||||||
|
region: 'us-east-1',
|
||||||
|
endpoint: this.configService.get('MINIOHOST') || '',
|
||||||
|
credentials: {
|
||||||
|
accessKeyId: this.configService.get('MINIOUSER') || '',
|
||||||
|
secretAccessKey: this.configService.get('MINIOACCESSKEY') || '',
|
||||||
|
},
|
||||||
|
forcePathStyle: true,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
async uploadPdf(bucket: string, key: string, pdfBuffer: Buffer): Promise<void> {
|
||||||
|
await this.client.send(
|
||||||
|
new PutObjectCommand({
|
||||||
|
Bucket: bucket,
|
||||||
|
Key: key,
|
||||||
|
Body: pdfBuffer,
|
||||||
|
ContentType: 'application/pdf',
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
8
src/storage/storage.module.ts
Normal file
8
src/storage/storage.module.ts
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
import { Module } from '@nestjs/common';
|
||||||
|
import { MinioService } from './minio/minio.service';
|
||||||
|
|
||||||
|
@Module({
|
||||||
|
providers: [MinioService],
|
||||||
|
exports: [MinioService]
|
||||||
|
})
|
||||||
|
export class StorageModule {}
|
||||||
Reference in New Issue
Block a user