Skip to content

Commit ea4ea5e

Browse files
committed
Moved logic to static service
1 parent d2f18d7 commit ea4ea5e

File tree

5 files changed

+22
-25
lines changed

5 files changed

+22
-25
lines changed

src/static/aws/s3.service.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { Logger } from '@nestjs/common';
33
import { Static } from '../static.interface';
44
import { DeleteObjectCommand, GetObjectCommand, PutObjectCommand, S3Client } from '@aws-sdk/client-s3';
55
import { Readable } from 'stream';
6+
import { getSignedUrl } from '@aws-sdk/s3-request-presigner';
67

78
export class AWSS3Service implements Static {
89
private readonly logger: Logger = new Logger(AWSS3Service.name);
@@ -53,6 +54,14 @@ export class AWSS3Service implements Static {
5354
}
5455
}
5556

57+
async getImageUrl(imageName: string): Promise<string> {
58+
const command = new GetObjectCommand({
59+
Bucket: `${this.AWS_S3_BUCKET_NAME}`,
60+
Key: imageName,
61+
});
62+
return getSignedUrl(this.s3Client, command, { expiresIn: 3600 });
63+
}
64+
5665
async deleteImage(imageName: string): Promise<boolean> {
5766
if (!imageName) return false;
5867
try {

src/static/hdd/hdd.service.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ export class HddService implements Static {
2121
return path.resolve(HDD_IMAGE_PATH, imageName);
2222
}
2323

24+
getImageUrl(imageName: string): Promise<string> {
25+
return Promise.resolve('/' + imageName);
26+
}
27+
2428
async saveImage(type: 'screenshot' | 'diff' | 'baseline', imageBuffer: Buffer): Promise<string> {
2529
try {
2630
new PNG().parse(imageBuffer);

src/static/static.controller.ts

Lines changed: 4 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,20 @@
11
import { Controller, Get, Logger, Param, Res } from '@nestjs/common';
22
import { Response } from 'express';
33
import { ApiOkResponse, ApiTags } from '@nestjs/swagger';
4-
import { isHddStaticServiceConfigured, isS3ServiceConfigured } from './utils';
5-
import { GetObjectCommand, S3Client } from '@aws-sdk/client-s3';
6-
import { getSignedUrl } from '@aws-sdk/s3-request-presigner';
4+
import { StaticService } from './static.service';
75

86
@ApiTags('images')
97
@Controller('images')
108
export class StaticController {
119
private readonly logger: Logger = new Logger(StaticController.name);
10+
constructor(private staticService: StaticService) {}
1211

1312
@Get('/:fileName')
1413
@ApiOkResponse()
1514
async getUrlAndRedirect(@Param('fileName') fileName: string, @Res() res: Response) {
1615
try {
17-
if (isHddStaticServiceConfigured()) {
18-
res.redirect('/' + fileName);
19-
}
20-
if (isS3ServiceConfigured()) {
21-
const AWS_ACCESS_KEY_ID = process.env.AWS_ACCESS_KEY_ID;
22-
const AWS_SECRET_ACCESS_KEY = process.env.AWS_SECRET_ACCESS_KEY;
23-
const AWS_REGION = process.env.AWS_REGION;
24-
const AWS_S3_BUCKET_NAME = process.env.AWS_S3_BUCKET_NAME;
25-
26-
const s3Client = new S3Client({
27-
credentials: {
28-
accessKeyId: `${AWS_ACCESS_KEY_ID}`,
29-
secretAccessKey: `${AWS_SECRET_ACCESS_KEY}`,
30-
},
31-
region: `${AWS_REGION}`,
32-
});
33-
const command = new GetObjectCommand({
34-
Bucket: `${AWS_S3_BUCKET_NAME}`,
35-
Key: fileName,
36-
});
37-
res.redirect(await getSignedUrl(s3Client, command, { expiresIn: 3600 }));
38-
}
16+
const url = await this.staticService.getImageUrl(fileName);
17+
res.redirect(url);
3918
} catch (error) {
4019
this.logger.error('Error fetching file from S3:' + fileName, error);
4120
res.status(500).send('Error occurred while getting the file.');

src/static/static.interface.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@ export interface Static {
44
saveImage(type: 'screenshot' | 'diff' | 'baseline', imageBuffer: Buffer): Promise<string>;
55
getImage(fileName: string): Promise<PNGWithMetadata>;
66
deleteImage(imageName: string): Promise<boolean>;
7+
getImageUrl(imageName: string): Promise<string>;
78
}

src/static/static.service.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,8 @@ export class StaticService {
2323
async deleteImage(imageName: string): Promise<boolean> {
2424
return this.staticService.deleteImage(imageName);
2525
}
26+
27+
async getImageUrl(imageName: string): Promise<string> {
28+
return this.staticService.getImageUrl(imageName);
29+
}
2630
}

0 commit comments

Comments
 (0)