Add bull and caching

This commit is contained in:
2023-11-20 15:25:07 -07:00
parent 5a54a9ca5b
commit 725cabefe6
7 changed files with 339 additions and 29 deletions

View File

@@ -1,4 +1,4 @@
import { Injectable } from '@nestjs/common';
import { Injectable, Logger } from '@nestjs/common';
import { UploadedObjectInfo } from 'minio';
import { MinioService } from 'src/minio/minio.service';
@@ -8,6 +8,7 @@ export class KvService {
private readonly kvPrefix = 'kv';
private readonly kvMetadataFileName = 'metadata.json';
private readonly kvMetadataPath = `${this.kvPrefix}/${this.kvMetadataFileName}`;
private readonly logger: Logger = new Logger(KvService.name);
constructor(private readonly minioService: MinioService) {}
@@ -46,6 +47,7 @@ export class KvService {
}
metadata[namespace].secretKey = this.generateSecretKey();
await this.setMetadataFile(Buffer.from(JSON.stringify(metadata)));
this.logger.verbose(`Rotated secret key for ${namespace}`);
return metadata[namespace];
}
@@ -114,6 +116,7 @@ export class KvService {
claimed: new Date().toISOString(),
};
await this.setMetadataFile(Buffer.from(JSON.stringify(metadata)));
this.logger.verbose(`Claimed namespace ${namespace}`);
return metadata[namespace];
}
@@ -135,6 +138,7 @@ export class KvService {
if (metadata[namespace]?.secretKey !== secretKey) {
throw new Error('Incorrect secret key for namespace');
}
this.logger.verbose(`Setting ${namespace}/${key}`);
return await this.minioService.uploadBuffer(
this.kvBucketName,
this.generateFilePath(namespace, key),
@@ -148,6 +152,7 @@ export class KvService {
}
public async delete(namespace: string, key: string): Promise<void> {
this.logger.verbose(`Deleting ${namespace}/${key}`);
await this.minioService.deleteObject(
this.kvBucketName,
this.generateFilePath(namespace, key),
@@ -167,10 +172,12 @@ export class KvService {
if (metadata[namespace]?.secretKey !== secretKey) {
throw new Error('Incorrect secret key for namespace');
}
return await this.minioService.generatePresignedUrl(
const presignedUrl = await this.minioService.generatePresignedUrl(
this.kvBucketName,
this.generateFilePath(namespace, key),
expiry,
);
this.logger.verbose(`Generated presigned URL for ${namespace}/${key}`);
return presignedUrl;
}
}