mirror of
				https://github.com/zadam/trilium.git
				synced 2025-10-31 10:26:08 +01:00 
			
		
		
		
	basic entity support with lazy loaded relations
This commit is contained in:
		
							
								
								
									
										11
									
								
								src/entities/attribute.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								src/entities/attribute.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | ||||
| "use strict"; | ||||
|  | ||||
| const Entity = require('./entity'); | ||||
|  | ||||
| class Attribute extends Entity { | ||||
|     async getNote() { | ||||
|         return this.sql.getEntity("SELECT * FROM notes WHERE noteId = ?", [this.noteId]); | ||||
|     } | ||||
| } | ||||
|  | ||||
| module.exports = Attribute; | ||||
							
								
								
									
										13
									
								
								src/entities/entity.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								src/entities/entity.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | ||||
| "use strict"; | ||||
|  | ||||
| class Entity { | ||||
|     constructor(sql, row) { | ||||
|         this.sql = sql; | ||||
|  | ||||
|         for (const key in row) { | ||||
|             this[key] = row[key]; | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| module.exports = Entity; | ||||
| @@ -1,20 +1,22 @@ | ||||
| "use strict"; | ||||
|  | ||||
| class Note { | ||||
|     constructor(sql, row) { | ||||
|         this.sql = sql; | ||||
| const Entity = require('./entity'); | ||||
|  | ||||
|         for (const key in row) { | ||||
|             this[key] = row[key]; | ||||
|         } | ||||
| class Note extends Entity { | ||||
|     async getAttributes() { | ||||
|         return this.sql.getEntities("SELECT * FROM attributes WHERE noteId = ?", [this.noteId]); | ||||
|     } | ||||
|  | ||||
|     async attributes() { | ||||
|         return this.sql.getRows("SELECT * FROM attributes WHERE noteId = ?", [this.noteId]); | ||||
|     async getAttribute(name) { | ||||
|         return this.sql.getEntity("SELECT * FROM attributes WHERE noteId = ? AND name = ?", [this.noteId, name]); | ||||
|     } | ||||
|  | ||||
|     async revisions() { | ||||
|         return this.sql.getRows("SELECT * FROM note_revisions WHERE noteId = ?", [this.noteId]); | ||||
|     async getRevisions() { | ||||
|         return this.sql.getEntities("SELECT * FROM note_revisions WHERE noteId = ?", [this.noteId]); | ||||
|     } | ||||
|  | ||||
|     async getTrees() { | ||||
|         return this.sql.getEntities("SELECT * FROM note_tree WHERE isDeleted = 0 AND noteId = ?", [this.noteId]); | ||||
|     } | ||||
| } | ||||
|  | ||||
|   | ||||
							
								
								
									
										11
									
								
								src/entities/note_revision.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								src/entities/note_revision.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | ||||
| "use strict"; | ||||
|  | ||||
| const Entity = require('./entity'); | ||||
|  | ||||
| class NoteRevision extends Entity { | ||||
|     async getNote() { | ||||
|         return this.sql.getEntity("SELECT * FROM notes WHERE noteId = ?", [this.noteId]); | ||||
|     } | ||||
| } | ||||
|  | ||||
| module.exports = NoteRevision; | ||||
							
								
								
									
										15
									
								
								src/entities/note_tree.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								src/entities/note_tree.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | ||||
| "use strict"; | ||||
|  | ||||
| const Entity = require('./entity'); | ||||
|  | ||||
| class NoteTree extends Entity { | ||||
|     async getNote() { | ||||
|         return this.sql.getEntity("SELECT * FROM note_tree WHERE isDeleted = 0 AND noteId = ?", [this.noteId]); | ||||
|     } | ||||
|  | ||||
|     async getParentNote() { | ||||
|         return this.sql.getEntity("SELECT * FROM note_tree WHERE isDeleted = 0 AND parentNoteId = ?", [this.parentNoteId]); | ||||
|     } | ||||
| } | ||||
|  | ||||
| module.exports = NoteTree; | ||||
| @@ -7,6 +7,9 @@ const sqlite = require('sqlite'); | ||||
| const app_info = require('./app_info'); | ||||
| const resource_dir = require('./resource_dir'); | ||||
| const Note = require('../entities/note'); | ||||
| const NoteRevision = require('../entities/note_revision'); | ||||
| const NoteTree = require('../entities/note_tree'); | ||||
| const Attribute = require('../entities/attribute'); | ||||
|  | ||||
| async function createConnection() { | ||||
|     return await sqlite.open(dataDir.DOCUMENT_PATH, {Promise}); | ||||
| @@ -137,13 +140,40 @@ async function getRows(query, params = []) { | ||||
| async function getEntities(query, params = []) { | ||||
|     const rows = await getRows(query, params); | ||||
|  | ||||
|     return rows.map(row => new Note(module.exports, row)); | ||||
|     return rows.map(createEntityFromRow); | ||||
| } | ||||
|  | ||||
| async function getEntity(query, params = []) { | ||||
|     const rows = await getRows(query, params); | ||||
|     const row = await getRowOrNull(query, params); | ||||
|  | ||||
|     return rows.map(row => new Note(module.exports, row)); | ||||
|     if (!row) { | ||||
|         return null; | ||||
|     } | ||||
|  | ||||
|     return createEntityFromRow(row); | ||||
| } | ||||
|  | ||||
| function createEntityFromRow(row) { | ||||
|     let entity; | ||||
|     let sql = module.exports; | ||||
|  | ||||
|     if (row.attributeId) { | ||||
|         entity = new Attribute(sql, row); | ||||
|     } | ||||
|     else if (row.noteRevisionId) { | ||||
|         entity = new NoteRevision(sql, row); | ||||
|     } | ||||
|     else if (row.noteTreeId) { | ||||
|         entity = new NoteTree(sql, row); | ||||
|     } | ||||
|     else if (row.noteId) { | ||||
|         entity = new Note(sql, row); | ||||
|     } | ||||
|     else { | ||||
|         throw new Error('Unknown entity type for row: ' + JSON.stringify(row)); | ||||
|     } | ||||
|  | ||||
|     return entity; | ||||
| } | ||||
|  | ||||
| async function getMap(query, params = []) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user