feat: Add dynamic S3 Cache-Control headers based on upload folder type to S3 upload operations.

This commit is contained in:
pradeepkumar
2026-02-02 16:26:27 +05:30
parent 8e71915501
commit ea05e18c15

View File

@@ -56,6 +56,20 @@ export class UploadService {
return parts.length > 1 ? parts.pop()!.toLowerCase() : '';
}
/**
* Get Cache-Control header value based on folder type
* Since file IDs change on re-upload, we can use long cache times
*/
private getCacheControl(folder: UploadFolder): string {
const cacheDurations: Record<UploadFolder, number> = {
[UploadFolder.AVATARS]: 30 * 24 * 60 * 60, // 30 days
[UploadFolder.DOCUMENTS]: 7 * 24 * 60 * 60, // 7 days
[UploadFolder.PROPERTIES]: 30 * 24 * 60 * 60, // 30 days
[UploadFolder.VERIFICATION]: 1 * 24 * 60 * 60, // 1 day
};
return `public, max-age=${cacheDurations[folder] || 86400}`;
}
private validateContentType(contentType: string, folder: UploadFolder): void {
const allowedTypes: Record<UploadFolder, string[]> = {
[UploadFolder.AVATARS]: ['image/jpeg', 'image/png', 'image/webp'],
@@ -100,6 +114,7 @@ export class UploadService {
Bucket: this.bucket,
Key: key,
ContentType: dto.contentType,
CacheControl: this.getCacheControl(dto.folder),
});
const uploadUrl = await getSignedUrl(this.s3Client, command, {
@@ -165,6 +180,7 @@ export class UploadService {
Key: key,
Body: buffer,
ContentType: contentType,
CacheControl: this.getCacheControl(folder),
});
await this.s3Client.send(command);
@@ -198,6 +214,7 @@ export class UploadService {
Bucket: this.bucket,
Key: key,
ContentType: contentType,
CacheControl: this.getCacheControl(UploadFolder.AVATARS),
});
const uploadUrl = await getSignedUrl(this.s3Client, command, {
@@ -234,6 +251,7 @@ export class UploadService {
Bucket: this.bucket,
Key: key,
ContentType: contentType,
CacheControl: this.getCacheControl(UploadFolder.AVATARS),
});
const uploadUrl = await getSignedUrl(this.s3Client, command, {