// /components/files/fileService.js const path = require('path'); const { uploadToTempBucket, commitTempFile, generatePresignedUrl, deleteFromBucket } = require('../../utils/s3Client'); const AppError = require('../../utils/AppError'); const uploadTempFile = async (fileBuffer, originalName, mimeType) => { if (!fileBuffer || !originalName) { throw new AppError('FILE_REQUIRED'); } const ext = path.extname(originalName); const uniquePrefix = `${Date.now()}-${Math.round(Math.random() * 1E9)}`; const tempFileName = `temp-${uniquePrefix}${ext}`; const result = await uploadToTempBucket(fileBuffer, tempFileName, mimeType); return { tempFileName: result.tempFileName, originalName, mimeType }; }; const getPresignedUrl = async (filename, bucket = null) => { if (!filename) { throw new AppError('VALIDATION_FAILED', null, 'Filename is required'); } const signedUrl = await generatePresignedUrl(filename, bucket || undefined); return { filename, presignedUrl: signedUrl, expiresInSeconds: 900 }; }; const commitFile = async (tempFileName, targetFileName = null) => { return commitTempFile(tempFileName, targetFileName); }; const deleteFile = async (filename, bucket = null) => { return deleteFromBucket(filename, bucket); }; module.exports = { uploadTempFile, getPresignedUrl, commitFile, deleteFile };