File size: 1,733 Bytes
c01955c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import { v2 as cloudinary } from "cloudinary";
import fs from "fs";
import logger from "../logger/create.logger.js";

cloudinary.config({
    cloud_name: process.env.CLOUD_NAME,
    api_key: process.env.API_KEY,
    api_secret: process.env.API_SECRET
});

async function uploadOnCloudinary(localFilePath: string) {
    try {
        if (!localFilePath) return null;

        // Determine file type from extension
        const fileExt = localFilePath.split('.').pop()?.toLowerCase();
        const resourceType = fileExt === 'pdf' ? 'raw' : 'auto'; // PDFs -> raw, others -> auto

        logger.info(`Uploading file to Cloudinary: ${localFilePath}`);
        const uploadResult = await cloudinary.uploader.upload(localFilePath, {
            resource_type: "auto"
        });

        logger.info("File uploaded successfully to Cloudinary", { public_id: uploadResult.public_id });

        // Delete file from local server
        fs.unlinkSync(localFilePath);

        return uploadResult;

    } catch (err) {
        logger.error("Cloudinary upload error:", err);

        // Delete temp file even if upload fails
        if (fs.existsSync(localFilePath)) fs.unlinkSync(localFilePath);

        return null;
    }
}

async function deleteOnCloudinary(url: string){
    const public_id = url.split("/").pop()?.split(".").shift();
    if(!public_id){
        throw new Error("Invalid file path")
    }
    try{
        logger.info(`Deleting file from Cloudinary: ${public_id}`);
        await cloudinary.uploader.destroy(public_id); 
        logger.info(`File deleted from Cloudinary: ${public_id}`);
    } catch(e) {
        logger.error("Cloudinary delete error:", e);
    }
}

export { uploadOnCloudinary, deleteOnCloudinary };