mizuki-express/services/uploadService.js
2025-06-08 17:59:26 +02:00

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
};