| 
									
										
										
										
											2023-04-01 23:55:04 +02:00
										 |  |  | const becca = require("../../becca/becca"); | 
					
						
							| 
									
										
										
										
											2023-06-14 22:21:22 +02:00
										 |  |  | 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) { | 
					
						
							| 
									
										
										
										
											2023-05-08 00:02:08 +02:00
										 |  |  |     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; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-08 00:02:08 +02:00
										 |  |  |     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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-08 00:02:08 +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 | 
					
						
							|  |  |  | }; |