2023-04-01 23:55:04 +02:00
|
|
|
const becca = require("../../becca/becca");
|
|
|
|
const NotFoundError = require("../../errors/not_found_error");
|
|
|
|
const utils = require("../../services/utils");
|
2023-05-05 16:37:39 +02:00
|
|
|
const blobService = require("../../services/blob.js");
|
|
|
|
|
|
|
|
function getAttachmentBlob(req) {
|
|
|
|
const full = req.query.full === 'true';
|
|
|
|
|
|
|
|
return blobService.getBlobPojo('attachments', req.params.attachmentId, { full });
|
|
|
|
}
|
2023-04-01 23:55:04 +02:00
|
|
|
|
|
|
|
function getAttachments(req) {
|
|
|
|
const includeContent = req.query.includeContent === 'true';
|
|
|
|
const {noteId} = req.params;
|
|
|
|
|
|
|
|
const note = becca.getNote(noteId);
|
|
|
|
|
|
|
|
if (!note) {
|
|
|
|
throw new NotFoundError(`Note '${noteId}' doesn't exist.`);
|
|
|
|
}
|
|
|
|
|
|
|
|
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
|
|
|
|
2023-04-14 16:49:06 +02:00
|
|
|
const attachment = becca.getAttachment(attachmentId);
|
2023-04-01 23:55:04 +02:00
|
|
|
|
|
|
|
if (!attachment) {
|
2023-04-14 16:49:06 +02:00
|
|
|
throw new NotFoundError(`Attachment '${attachmentId}' doesn't exist.`);
|
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.getNote(noteId);
|
|
|
|
|
|
|
|
if (!note) {
|
|
|
|
throw new NotFoundError(`Note '${noteId}' doesn't exist.`);
|
|
|
|
}
|
|
|
|
|
|
|
|
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
|
|
|
|
2023-04-14 16:49:06 +02:00
|
|
|
const attachment = becca.getAttachment(attachmentId);
|
2023-04-01 23:55:04 +02:00
|
|
|
|
2023-04-14 16:49:06 +02:00
|
|
|
if (!attachment) {
|
|
|
|
throw new NotFoundError(`Attachment '${attachmentId}' doesn't exist.`);
|
2023-04-01 23:55:04 +02:00
|
|
|
}
|
|
|
|
|
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
|
|
|
|
};
|