Notes/src/routes/api/attachments.js

83 lines
2.3 KiB
JavaScript
Raw Normal View History

2023-04-01 23:55:04 +02:00
const becca = require("../../becca/becca");
const utils = require("../../services/utils");
2023-05-05 16:37:39 +02:00
const blobService = require("../../services/blob.js");
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 includeContent = req.query.includeContent === 'true';
const note = becca.getNoteOrThrow(req.params.noteId);
2023-04-01 23:55:04 +02:00
return note.getAttachments()
.map(attachment => processAttachment(attachment, includeContent));
}
function getAttachment(req) {
const includeContent = req.query.includeContent === 'true';
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-01 23:55:04 +02:00
return processAttachment(attachment, includeContent);
}
function processAttachment(attachment, includeContent) {
const pojo = attachment.getPojo();
if (includeContent) {
if (utils.isStringNote(null, attachment.mime)) {
pojo.content = attachment.getContent()?.toString();
pojo.contentLength = pojo.content.length;
const MAX_ATTACHMENT_LENGTH = 1_000_000;
if (pojo.content.length > MAX_ATTACHMENT_LENGTH) {
pojo.content = pojo.content.substring(0, MAX_ATTACHMENT_LENGTH);
}
} else {
const content = attachment.getContent();
pojo.contentLength = content?.length;
}
}
return pojo;
}
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});
}
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,
saveAttachment,
deleteAttachment,
convertAttachmentToNote
};