54 lines
1.3 KiB
JavaScript
54 lines
1.3 KiB
JavaScript
const Upload = require('../models/Upload');
|
|
const drive = require('./driveService');
|
|
const { randomUUID } = require('crypto');
|
|
const { Readable } = require('stream');
|
|
|
|
async function createUpload(user, file) {
|
|
const filename = randomUUID();
|
|
const upload = new Upload({
|
|
filename,
|
|
originalFilename: file.originalname,
|
|
sizeInBytes: file.size,
|
|
timeOfUpload: new Date(),
|
|
author: user._id
|
|
});
|
|
|
|
await upload.save();
|
|
const stream = Readable.from(file.buffer);
|
|
drive.saveFile(filename, stream);
|
|
|
|
return upload;
|
|
}
|
|
|
|
async function deleteUpload(user, filename) {
|
|
const upload = await Upload.findOne({ filename, author: user._id });
|
|
if (!upload) return;
|
|
await upload.deleteOne();
|
|
drive.deleteFile(filename);
|
|
}
|
|
|
|
async function getUserUploads(user) {
|
|
return await Upload.find({ author: user._id }).sort({ timeOfUpload: -1 });
|
|
}
|
|
|
|
async function getUploadByFilename(filename) {
|
|
return await Upload.findOne({ filename });
|
|
}
|
|
|
|
async function renameUpload(user, oldFilename, newFilename) {
|
|
const upload = await Upload.findOne({ filename: oldFilename, author: user._id });
|
|
if (!upload) return false;
|
|
|
|
upload.originalFilename = newFilename;
|
|
await upload.save();
|
|
|
|
return true;
|
|
}
|
|
|
|
module.exports = {
|
|
createUpload,
|
|
deleteUpload,
|
|
getUserUploads,
|
|
getUploadByFilename,
|
|
renameUpload
|
|
};
|