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