ADD: SignedUrls for documents, mainImage and images
ADD: Bucket and Upload System ADD: New errors ADD: Virtuals for categories ADD: Features system ADD: File management system
This commit is contained in:
@@ -0,0 +1,136 @@
|
||||
const File = require('./fileModel')
|
||||
const AppError = require('../../globalErrorHandler/AppError')
|
||||
const util = require('util')
|
||||
const fs = require('fs')
|
||||
const {
|
||||
uploadObject,
|
||||
deleteObject,
|
||||
listOfObjects,
|
||||
signedUrl,
|
||||
copyObject,
|
||||
removeObject,
|
||||
} = require('../../utils/upload/bucket')
|
||||
|
||||
const deleteTempFile = util.promisify(fs.unlink)
|
||||
|
||||
const bucketSingleUpload = async (file, bucketName) => {
|
||||
const fileData = {
|
||||
originalName: file.originalname,
|
||||
filename: file.filename,
|
||||
path: file.path,
|
||||
}
|
||||
|
||||
const result = await uploadObject(fileData, bucketName)
|
||||
|
||||
const data = {
|
||||
fileURL: result.fileURL,
|
||||
fileName: result.fileName,
|
||||
fileEndpoint: result.fileEndpoint,
|
||||
bucketName,
|
||||
}
|
||||
|
||||
// Delete file from uploads folder
|
||||
await deleteTempFile(file.path)
|
||||
|
||||
const fileRecord = await createFile(data)
|
||||
|
||||
return {
|
||||
status: 'success',
|
||||
fileRecord,
|
||||
}
|
||||
}
|
||||
|
||||
const bucketMultiUpload = async (files, bucketName) => {
|
||||
const results = []
|
||||
|
||||
for (let file of files) {
|
||||
const result = await bucketSingleUpload(file, bucketName)
|
||||
results.push(result)
|
||||
}
|
||||
|
||||
return results
|
||||
}
|
||||
|
||||
const bucketDeleteFile = async (fileName, bucketName) => {
|
||||
await deleteObject(fileName, bucketName)
|
||||
await deleteFile(fileName)
|
||||
|
||||
return null
|
||||
}
|
||||
|
||||
const getAllFiles = async () => {
|
||||
return File.find({}, null, null)
|
||||
}
|
||||
|
||||
const getFile = async (fileId) => {
|
||||
const file = await File.findById(fileId, null, null)
|
||||
|
||||
if (!file) {
|
||||
throw new AppError('NoFileFound', 404, {})
|
||||
}
|
||||
|
||||
return file
|
||||
}
|
||||
|
||||
const createFile = async (data) => {
|
||||
return File.create(data, null)
|
||||
}
|
||||
|
||||
const updateFile = async (fileId, data) => {
|
||||
const file = await File.findOneAndUpdate({ _id: fileId }, data, null)
|
||||
|
||||
if (!file) {
|
||||
throw AppError('NoFileFound', 404, {})
|
||||
}
|
||||
|
||||
return file
|
||||
}
|
||||
|
||||
const deleteFile = async (fileName) => {
|
||||
await File.findOneAndDelete({ fileName }, null)
|
||||
|
||||
return null
|
||||
}
|
||||
|
||||
const bucketGetFiles = async (bucketName) => {
|
||||
return listOfObjects(bucketName)
|
||||
}
|
||||
|
||||
const getSignedUrl = async (fileName, bucketName) => {
|
||||
if (!fileName) {
|
||||
return
|
||||
}
|
||||
return signedUrl(bucketName, fileName)
|
||||
}
|
||||
|
||||
const getMultipleSignedUrls = async (fileNameArray, bucketName) => {
|
||||
const urls = []
|
||||
for (let fileName of fileNameArray) {
|
||||
urls.push({ url: await getSignedUrl(fileName, bucketName)})
|
||||
}
|
||||
return urls
|
||||
}
|
||||
|
||||
const moveFromTempToMain = async (files, targetBucket) => {
|
||||
const tempBucket = 'temp'
|
||||
|
||||
for (const file of files) {
|
||||
await copyObject(targetBucket, file, `${tempBucket}/${file}`)
|
||||
|
||||
await removeObject(tempBucket, file)
|
||||
}
|
||||
}
|
||||
module.exports = {
|
||||
moveFromTempToMain,
|
||||
getMultipleSignedUrls,
|
||||
getSignedUrl,
|
||||
createFile,
|
||||
updateFile,
|
||||
deleteFile,
|
||||
getAllFiles,
|
||||
getFile,
|
||||
bucketSingleUpload,
|
||||
bucketMultiUpload,
|
||||
bucketDeleteFile,
|
||||
bucketGetFiles,
|
||||
}
|
||||
Reference in New Issue
Block a user