| 
									
										
										
										
											2018-01-13 18:02:41 -05:00
										 |  |  | "use strict"; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-13 15:25:09 -05:00
										 |  |  | const sql = require('./sql'); | 
					
						
							|  |  |  | const utils = require('./utils'); | 
					
						
							|  |  |  | const sync_table = require('./sync_table'); | 
					
						
							| 
									
										
										
										
											2018-01-26 23:40:48 -05:00
										 |  |  | const protected_session = require('./protected_session'); | 
					
						
							| 
									
										
										
										
											2018-01-13 15:25:09 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-23 22:11:03 -05:00
										 |  |  | async function getNoteAttributeMap(noteId) { | 
					
						
							| 
									
										
										
										
											2018-01-28 19:30:14 -05:00
										 |  |  |     return await sql.getMap(`SELECT name, value FROM attributes WHERE noteId = ?`, [noteId]); | 
					
						
							| 
									
										
										
										
											2018-01-23 22:11:03 -05:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-13 15:25:09 -05:00
										 |  |  | async function getNoteIdWithAttribute(name, value) { | 
					
						
							| 
									
										
										
										
											2018-01-28 19:30:14 -05:00
										 |  |  |     return await sql.getFirstValue(`SELECT notes.noteId FROM notes JOIN attributes USING(noteId) 
 | 
					
						
							|  |  |  |           WHERE notes.isDeleted = 0 AND attributes.name = ? AND attributes.value = ?`, [name, value]);
 | 
					
						
							| 
									
										
										
										
											2018-01-13 15:25:09 -05:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-28 12:08:57 -05:00
										 |  |  | async function getNotesWithAttribute(dataKey, name, value) { | 
					
						
							|  |  |  |     let notes; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (value !== undefined) { | 
					
						
							| 
									
										
										
										
											2018-01-28 19:30:14 -05:00
										 |  |  |         notes = await sql.getAll(`SELECT notes.* FROM notes JOIN attributes USING(noteId) 
 | 
					
						
							|  |  |  |           WHERE notes.isDeleted = 0 AND attributes.name = ? AND attributes.value = ?`, [name, value]);
 | 
					
						
							| 
									
										
										
										
											2018-01-28 12:08:57 -05:00
										 |  |  |     } | 
					
						
							|  |  |  |     else { | 
					
						
							| 
									
										
										
										
											2018-01-28 19:30:14 -05:00
										 |  |  |         notes = await sql.getAll(`SELECT notes.* FROM notes JOIN attributes USING(noteId) 
 | 
					
						
							|  |  |  |           WHERE notes.isDeleted = 0 AND attributes.name = ?`, [name]);
 | 
					
						
							| 
									
										
										
										
											2018-01-28 12:08:57 -05:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2018-01-26 23:40:48 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-28 12:08:57 -05:00
										 |  |  |     for (const note of notes) { | 
					
						
							|  |  |  |         protected_session.decryptNote(dataKey, note); | 
					
						
							| 
									
										
										
										
											2018-01-26 23:40:48 -05:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-28 12:08:57 -05:00
										 |  |  |     return notes; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | async function getNoteWithAttribute(dataKey, name, value) { | 
					
						
							|  |  |  |     const notes = getNotesWithAttribute(dataKey, name, value); | 
					
						
							| 
									
										
										
										
											2018-01-26 23:40:48 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-28 12:08:57 -05:00
										 |  |  |     return notes.length > 0 ? notes[0] : null; | 
					
						
							| 
									
										
										
										
											2018-01-26 23:40:48 -05:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-25 23:49:03 -05:00
										 |  |  | async function getNoteIdsWithAttribute(name) { | 
					
						
							| 
									
										
										
										
											2018-01-28 19:30:14 -05:00
										 |  |  |     return await sql.getFirstColumn(`SELECT DISTINCT notes.noteId FROM notes JOIN attributes USING(noteId) 
 | 
					
						
							|  |  |  |           WHERE notes.isDeleted = 0 AND attributes.name = ?`, [name]);
 | 
					
						
							| 
									
										
										
										
											2018-01-25 23:49:03 -05:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-13 15:25:09 -05:00
										 |  |  | async function createAttribute(noteId, name, value = null, sourceId = null) { | 
					
						
							|  |  |  |     const now = utils.nowDate(); | 
					
						
							|  |  |  |     const attributeId = utils.newAttributeId(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     await sql.insert("attributes", { | 
					
						
							| 
									
										
										
										
											2018-01-28 19:30:14 -05:00
										 |  |  |         attributeId: attributeId, | 
					
						
							|  |  |  |         noteId: noteId, | 
					
						
							| 
									
										
										
										
											2018-01-13 15:25:09 -05:00
										 |  |  |         name: name, | 
					
						
							|  |  |  |         value: value, | 
					
						
							| 
									
										
										
										
											2018-01-28 19:30:14 -05:00
										 |  |  |         dateModified: now, | 
					
						
							|  |  |  |         dateCreated: now | 
					
						
							| 
									
										
										
										
											2018-01-13 15:25:09 -05:00
										 |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     await sync_table.addAttributeSync(attributeId, sourceId); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | module.exports = { | 
					
						
							| 
									
										
										
										
											2018-01-23 22:11:03 -05:00
										 |  |  |     getNoteAttributeMap, | 
					
						
							| 
									
										
										
										
											2018-01-13 15:25:09 -05:00
										 |  |  |     getNoteIdWithAttribute, | 
					
						
							| 
									
										
										
										
											2018-01-28 12:08:57 -05:00
										 |  |  |     getNotesWithAttribute, | 
					
						
							| 
									
										
										
										
											2018-01-26 23:40:48 -05:00
										 |  |  |     getNoteWithAttribute, | 
					
						
							| 
									
										
										
										
											2018-01-25 23:49:03 -05:00
										 |  |  |     getNoteIdsWithAttribute, | 
					
						
							| 
									
										
										
										
											2018-01-13 15:25:09 -05:00
										 |  |  |     createAttribute | 
					
						
							|  |  |  | }; |