44 lines
1.4 KiB
TypeScript
44 lines
1.4 KiB
TypeScript
import { deleteImageUtil, getOriginalUrlFromSignedUrl } from "@/src/lib/s3-client"
|
|
import { getS3Url } from "@/src/lib/env-exporter"
|
|
|
|
function extractS3Key(url: string): string | null {
|
|
try {
|
|
// Check if this is a signed URL first and get the original if it is
|
|
const originalUrl = getOriginalUrlFromSignedUrl(url) || url;
|
|
|
|
// Find the index of '.com/' in the URL
|
|
// const comIndex = originalUrl.indexOf(".com/");
|
|
const baseUrlIndex = originalUrl.indexOf(getS3Url());
|
|
|
|
// If '.com/' is found, return everything after it
|
|
if (baseUrlIndex !== -1) {
|
|
return originalUrl.substring(baseUrlIndex + getS3Url().length); // +5 to skip '.com/'
|
|
}
|
|
} catch (error) {
|
|
console.error("Error extracting key from URL:", error);
|
|
}
|
|
|
|
// Return null if the pattern isn't found or there was an error
|
|
return null;
|
|
}
|
|
|
|
|
|
export async function deleteS3Image(imageUrl: string) {
|
|
try {
|
|
// First check if this is a signed URL and get the original if it is
|
|
const originalUrl = getOriginalUrlFromSignedUrl(imageUrl) || imageUrl;
|
|
|
|
const key = extractS3Key(originalUrl || "");
|
|
|
|
|
|
if (!key) {
|
|
throw new Error("Invalid image URL format");
|
|
}
|
|
const deleteS3 = await deleteImageUtil({keys: [key] });
|
|
if (!deleteS3) {
|
|
throw new Error("Failed to delete image from S3");
|
|
}
|
|
} catch (error) {
|
|
console.error("Error deleting image from S3:", error);
|
|
}
|
|
}
|