import { Response, NextFunction } from 'express'; // import { DeleteFile } from '../utils/deletingFile'; import { ErrorResponse, SuccessResponse } from '../utils/Response'; import { HttpCodes } from '../config/Errors'; import { globalLogger } from '../utils/Logger'; import { MyRequest } from '../types/Express'; import { deleteFile, deleteFileThumbnail, } from '../middlewares/file.middleware'; import { uploadThumbnailToCloudinary, getThumbnailPublicId, deleteThumbnailFromCloudinary, } from '../utils/UploadToCloudinary'; export async function handleFileUploading( req: MyRequest, res: Response, next: NextFunction ): Promise { try { if (!req.file) return ErrorResponse( res, HttpCodes.BadRequest.code, 'No file uploaded', 'No file uploaded' ); const fileUrl = req.file; const filename = fileUrl.filename; // log first File uploaded - file name globalLogger.info(`File uploaded - ${filename}`, { code: HttpCodes.Accepted.code, type: HttpCodes.Accepted.type, file: fileUrl, }); return SuccessResponse( res, HttpCodes.Accepted.code, { name: fileUrl.filename, originalname: fileUrl.originalname, size: fileUrl.size, url: `${req.protocol}://${req.get('host')}/documents/${ fileUrl.filename }`, }, `File ${fileUrl.originalname} has been uploaded` ); } catch (error) { globalLogger.error('Error while uploading file', { code: HttpCodes.InternalServerError.code, type: HttpCodes.InternalServerError.type, error: error, }); return ErrorResponse( res, HttpCodes.InternalServerError.code, 'Error while uploading file', error ); } } export async function handleFileDeleting( req: MyRequest, res: Response, next: NextFunction ): Promise { try { if (!req.query.file) return ErrorResponse( res, HttpCodes.BadRequest.code, 'No file to delete', 'No file to delete' ); const file = req.query.file as string; const result = await deleteFile(file); if (result instanceof Error) { globalLogger.error('Error while deleting file', { code: HttpCodes.InternalServerError.code, type: HttpCodes.InternalServerError.type, error: result, }); return ErrorResponse( res, HttpCodes.InternalServerError.code, 'Error while deleting file', result ); } return SuccessResponse( res, HttpCodes.Accepted.code, {}, `File ${file} has been deleted` ); } catch (error) { globalLogger.error('Error while deleting file', { code: HttpCodes.InternalServerError.code, type: HttpCodes.InternalServerError.type, error: error, }); return ErrorResponse( res, HttpCodes.InternalServerError.code, 'Error while deleting file', error ); } } export async function handleFileGetting( req: MyRequest, res: Response, next: NextFunction ): Promise { try { if (!req.query.file) return ErrorResponse( res, HttpCodes.BadRequest.code, 'No file to get', 'No file to get' ); const file = req.query.file as string; return res.download(`uploads/documents/${file}`, file, (error) => { if (error) { globalLogger.error('Error while getting file', { code: HttpCodes.InternalServerError.code, type: HttpCodes.InternalServerError.type, error: error, }); return ErrorResponse( res, HttpCodes.InternalServerError.code, 'Error while getting file', error ); } }); } catch (error) { globalLogger.error('Error while getting file', { code: HttpCodes.InternalServerError.code, type: HttpCodes.InternalServerError.type, error: error, }); return ErrorResponse( res, HttpCodes.InternalServerError.code, 'Error while getting file', error ); } } export async function handleFileThumbnailUploading( req: MyRequest, res: Response, next: NextFunction ): Promise { try { if (!req.file) return ErrorResponse( res, HttpCodes.BadRequest.code, 'No file uploaded', 'No file uploaded' ); const file = req.file; const filename = file.filename; const fileUrl = await uploadThumbnailToCloudinary(filename); globalLogger.info(`File uploaded - ${filename}`, { code: HttpCodes.Accepted.code, type: HttpCodes.Accepted.type, file: file, }); return SuccessResponse( res, HttpCodes.Accepted.code, { fileUrl, }, `File ${file.originalname} has been uploaded` ); } catch (error) { globalLogger.error('Error while uploading file', { code: HttpCodes.InternalServerError.code, type: HttpCodes.InternalServerError.type, error: error, }); return ErrorResponse( res, HttpCodes.InternalServerError.code, 'Error while uploading file', error ); } } export async function handleFileThumbnailDeleting( req: MyRequest, res: Response, next: NextFunction ): Promise { try { if (!req.query.file) return ErrorResponse( res, HttpCodes.BadRequest.code, 'No file to delete', 'No file to delete' ); const fileUrl = req.query.file as string; const publicId = getThumbnailPublicId(fileUrl); const result: any = await deleteThumbnailFromCloudinary(publicId); if (result instanceof Error) { globalLogger.error('Error while deleting file', { code: HttpCodes.InternalServerError.code, type: HttpCodes.InternalServerError.type, error: result, }); return ErrorResponse( res, HttpCodes.InternalServerError.code, 'Error while deleting file', result ); } globalLogger.info(`File deleted - ${publicId}`, { code: HttpCodes.Accepted.code, type: HttpCodes.Accepted.type, }); return SuccessResponse( res, HttpCodes.Accepted.code, {}, `File ${publicId} has been deleted` ); } catch (error) { globalLogger.error('Error while deleting file', { code: HttpCodes.InternalServerError.code, type: HttpCodes.InternalServerError.type, error: error, }); return ErrorResponse( res, HttpCodes.InternalServerError.code, 'Error while deleting file', error ); } }