From d633a8696fded8bcbb7109e245a52c0c3ccb0a87 Mon Sep 17 00:00:00 2001 From: Harish-Naruto Date: Fri, 21 Nov 2025 20:31:09 +0530 Subject: [PATCH 1/3] refactor image update logic in uploadImg function --- src/utils/imageUtils.ts | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/utils/imageUtils.ts b/src/utils/imageUtils.ts index c8a35a0..c1d5591 100644 --- a/src/utils/imageUtils.ts +++ b/src/utils/imageUtils.ts @@ -37,13 +37,11 @@ export async function uploadImage( } const ext = mime.split("/")[1]; - let filename: string; + if (fileUrl) { - const { fileName } = extractFilePathAndNameFromUrl(fileUrl); - filename = fileName; - } else { - filename = `${uuidv4()}.${ext}`; + await deleteImage(supabase,fileUrl); } + const filename:string = `${uuidv4()}.${ext}`; const filePath = `${folder}/${filename}`; From a51fb63bbdd9bdd5d7bb8792c07b5d50b79f72ff Mon Sep 17 00:00:00 2001 From: Harish-Naruto Date: Fri, 21 Nov 2025 22:58:04 +0530 Subject: [PATCH 2/3] update test for imageutils update function --- src/utils/imageUtils.ts | 8 ++++---- tests/imageUtils.test.ts | 5 ++++- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/utils/imageUtils.ts b/src/utils/imageUtils.ts index c1d5591..a0a4043 100644 --- a/src/utils/imageUtils.ts +++ b/src/utils/imageUtils.ts @@ -37,10 +37,6 @@ export async function uploadImage( } const ext = mime.split("/")[1]; - - if (fileUrl) { - await deleteImage(supabase,fileUrl); - } const filename:string = `${uuidv4()}.${ext}`; const filePath = `${folder}/${filename}`; @@ -64,6 +60,10 @@ export async function uploadImage( throw new ApiError("Failed to get public URL", 500); } + if (fileUrl) { + await deleteImage(supabase, fileUrl); + } + return urlData.publicUrl; } diff --git a/tests/imageUtils.test.ts b/tests/imageUtils.test.ts index 70e9579..d480b99 100644 --- a/tests/imageUtils.test.ts +++ b/tests/imageUtils.test.ts @@ -2,6 +2,7 @@ import { uploadImage, deleteImage } from "../src/utils/imageUtils"; import { SupabaseClient, PostgrestError } from "@supabase/supabase-js"; import { ApiError } from "../src/utils/apiError"; import { v4 as uuidv4 } from "uuid"; +import { error } from "console"; jest.mock("uuid"); const mockedUuid = uuidv4 as jest.Mock; @@ -21,6 +22,7 @@ describe("imageUtils", () => { from: jest.fn().mockReturnThis(), upload: jest.fn(), getPublicUrl: jest.fn(), + deleteImage: jest.fn(), remove: jest.fn(), }; @@ -61,6 +63,7 @@ describe("imageUtils", () => { storageMock.getPublicUrl.mockReturnValue({ data: { publicUrl: "https://public.url/existing.png" }, }); + storageMock.remove.mockReturnValue({error:null}); const url = await uploadImage( mockSupabase as SupabaseClient, @@ -70,7 +73,7 @@ describe("imageUtils", () => { ); // Should use filename 'existing.png' instead of generating with uuid expect(storageMock.upload).toHaveBeenCalledWith( - "folder/existing.png", + "folder/test-uuid.png", dummyFile.buffer, { contentType: dummyFile.mimetype, upsert: true }, ); From e2ec074b7dd2013c999aa83e847a1dcf7c1d6aef Mon Sep 17 00:00:00 2001 From: Harish-Naruto Date: Fri, 21 Nov 2025 23:04:59 +0530 Subject: [PATCH 3/3] fix minor issues --- tests/imageUtils.test.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tests/imageUtils.test.ts b/tests/imageUtils.test.ts index d480b99..96f27e9 100644 --- a/tests/imageUtils.test.ts +++ b/tests/imageUtils.test.ts @@ -2,7 +2,6 @@ import { uploadImage, deleteImage } from "../src/utils/imageUtils"; import { SupabaseClient, PostgrestError } from "@supabase/supabase-js"; import { ApiError } from "../src/utils/apiError"; import { v4 as uuidv4 } from "uuid"; -import { error } from "console"; jest.mock("uuid"); const mockedUuid = uuidv4 as jest.Mock; @@ -21,8 +20,7 @@ describe("imageUtils", () => { storageMock = { from: jest.fn().mockReturnThis(), upload: jest.fn(), - getPublicUrl: jest.fn(), - deleteImage: jest.fn(), + getPublicUrl: jest.fn(), remove: jest.fn(), };