Notes/src/routes/api/attachments.js

99 lines
2.4 KiB
JavaScript
Raw Normal View History

2023-04-01 23:55:04 +02:00
const becca = require("../../becca/becca");
const blobService = require("../../services/blob");
2023-06-14 00:28:59 +02:00
const ValidationError = require("../../errors/validation_error");
2023-05-05 16:37:39 +02:00
function getAttachmentBlob(req) {
2023-05-05 22:21:51 +02:00
const preview = req.query.preview === 'true';
2023-05-05 16:37:39 +02:00
2023-05-05 22:21:51 +02:00
return blobService.getBlobPojo('attachments', req.params.attachmentId, { preview });
2023-05-05 16:37:39 +02:00
}
2023-04-01 23:55:04 +02:00
function getAttachments(req) {
const note = becca.getNoteOrThrow(req.params.noteId);
2023-04-01 23:55:04 +02:00
2023-05-21 18:14:17 +02:00
return note.getAttachments({includeContentLength: true});
2023-04-01 23:55:04 +02:00
}
function getAttachment(req) {
2023-04-14 16:49:06 +02:00
const {attachmentId} = req.params;
2023-04-01 23:55:04 +02:00
2023-05-21 18:14:17 +02:00
return becca.getAttachmentOrThrow(attachmentId, {includeContentLength: true});
2023-04-01 23:55:04 +02:00
}
2023-05-29 00:19:54 +02:00
function getAllAttachments(req) {
const {attachmentId} = req.params;
// one particular attachment is requested, but return all note's attachments
const attachment = becca.getAttachmentOrThrow(attachmentId);
return attachment.getNote()?.getAttachments({includeContentLength: true}) || [];
}
2023-04-01 23:55:04 +02:00
function saveAttachment(req) {
const {noteId} = req.params;
const {attachmentId, role, mime, title, content} = req.body;
const note = becca.getNoteOrThrow(noteId);
2023-04-01 23:55:04 +02:00
note.saveAttachment({attachmentId, role, mime, title, content});
}
2023-06-06 12:31:38 +02:00
function uploadAttachment(req) {
const {noteId} = req.params;
const {file} = req;
const note = becca.getNoteOrThrow(noteId);
2023-06-14 00:28:59 +02:00
note.saveAttachment({
2023-06-06 12:31:38 +02:00
role: 'file',
mime: file.mimetype,
title: file.originalname,
content: file.buffer
});
return {
uploaded: true
};
}
2023-06-14 00:28:59 +02:00
function renameAttachment(req) {
const {title} = req.body;
const {attachmentId} = req.params;
const attachment = becca.getAttachmentOrThrow(attachmentId);
if (!title?.trim()) {
throw new ValidationError("Title must not be empty");
}
attachment.title = title;
attachment.save();
}
2023-04-01 23:55:04 +02:00
function deleteAttachment(req) {
2023-04-14 16:49:06 +02:00
const {attachmentId} = req.params;
2023-04-01 23:55:04 +02:00
2023-04-14 16:49:06 +02:00
const attachment = becca.getAttachment(attachmentId);
2023-04-01 23:55:04 +02:00
if (attachment) {
attachment.markAsDeleted();
}
}
function convertAttachmentToNote(req) {
2023-04-14 16:49:06 +02:00
const {attachmentId} = req.params;
2023-04-01 23:55:04 +02:00
const attachment = becca.getAttachmentOrThrow(attachmentId);
2023-04-14 16:49:06 +02:00
return attachment.convertToNote();
2023-04-01 23:55:04 +02:00
}
module.exports = {
2023-05-05 16:37:39 +02:00
getAttachmentBlob,
2023-04-01 23:55:04 +02:00
getAttachments,
getAttachment,
2023-05-29 00:19:54 +02:00
getAllAttachments,
2023-04-01 23:55:04 +02:00
saveAttachment,
2023-06-06 12:31:38 +02:00
uploadAttachment,
2023-06-14 00:28:59 +02:00
renameAttachment,
2023-04-01 23:55:04 +02:00
deleteAttachment,
convertAttachmentToNote
};