diff --git a/src/entities/entity.js b/src/entities/entity.js index 2c44cc945..1842c15a8 100644 --- a/src/entities/entity.js +++ b/src/entities/entity.js @@ -3,10 +3,8 @@ const utils = require('../services/utils'); class Entity { - constructor(repository, row) { - utils.assertArguments(repository, row); - - this.repository = repository; + constructor(row) { + utils.assertArguments(row); for (const key in row) { this[key] = row[key]; diff --git a/src/routes/api/export.js b/src/routes/api/export.js index c0a7024ff..7f69fea46 100644 --- a/src/routes/api/export.js +++ b/src/routes/api/export.js @@ -4,17 +4,16 @@ const sql = require('../../services/sql'); const html = require('html'); const tar = require('tar-stream'); const sanitize = require("sanitize-filename"); -const Repository = require("../../services/repository"); +const repository = require("../../services/repository"); async function exportNote(req, res) { const noteId = req.params.noteId; - const repo = new Repository(req); const branchId = await sql.getValue('SELECT branchId FROM branches WHERE noteId = ?', [noteId]); const pack = tar.pack(); - const name = await exportNoteInner(branchId, '', pack, repo); + const name = await exportNoteInner(branchId, '', pack); pack.finalize(); @@ -24,9 +23,9 @@ async function exportNote(req, res) { pack.pipe(res); } -async function exportNoteInner(branchId, directory, pack, repo) { +async function exportNoteInner(branchId, directory, pack) { const branch = await sql.getRow("SELECT * FROM branches WHERE branchId = ?", [branchId]); - const note = await repo.getEntity("SELECT notes.* FROM notes WHERE noteId = ?", [branch.noteId]); + const note = await repository.getEntity("SELECT notes.* FROM notes WHERE noteId = ?", [branch.noteId]); if (note.isProtected) { return; @@ -51,7 +50,7 @@ async function exportNoteInner(branchId, directory, pack, repo) { if (children.length > 0) { for (const child of children) { - await exportNoteInner(child.branchId, childFileName + "/", pack, repo); + await exportNoteInner(child.branchId, childFileName + "/", pack); } } diff --git a/src/routes/api/script.js b/src/routes/api/script.js index 4f5d3b1ab..16a21b08c 100644 --- a/src/routes/api/script.js +++ b/src/routes/api/script.js @@ -2,7 +2,7 @@ const labels = require('../../services/labels'); const script = require('../../services/script'); -const Repository = require('../../services/repository'); +const repository = require('../../services/repository'); async function exec(req) { const ret = await script.executeScript(req, req.body.script, req.body.params, req.body.startNoteId, req.body.currentNoteId); @@ -13,7 +13,6 @@ async function exec(req) { } async function run(req) { - const repository = new Repository(req); const note = await repository.getNote(req.params.noteId); const ret = await script.executeNote(req, note); @@ -24,8 +23,7 @@ async function run(req) { } async function getStartupBundles(req) { - const repository = new Repository(req); - const notes = await labels.getNotesWithLabel(repository, "run", "frontend_startup"); + const notes = await labels.getNotesWithLabel("run", "frontend_startup"); const bundles = []; @@ -41,11 +39,8 @@ async function getStartupBundles(req) { } async function getBundle(req) { - const repository = new Repository(req); const note = await repository.getNote(req.params.noteId); - const bundle = await script.getScriptBundle(note); - - return bundle; + return await script.getScriptBundle(note); } module.exports = { diff --git a/src/routes/index.js b/src/routes/index.js index 7d19650dd..33564a099 100644 --- a/src/routes/index.js +++ b/src/routes/index.js @@ -2,22 +2,20 @@ const source_id = require('../services/source_id'); const sql = require('../services/sql'); -const Repository = require('../services/repository'); +const repository = require('../services/repository'); const labels = require('../services/labels'); async function index(req, res) { - const repository = new Repository(req); - res.render('index', { sourceId: await source_id.generateSourceId(), maxSyncIdAtLoad: await sql.getValue("SELECT MAX(id) FROM sync"), - appCss: await getAppCss(repository) + appCss: await getAppCss() }); } -async function getAppCss(repository) { +async function getAppCss() { let css = ''; - const notes = labels.getNotesWithLabel(repository, 'app_css'); + const notes = labels.getNotesWithLabel('app_css'); for (const note of await notes) { css += `/* ${note.noteId} */ diff --git a/src/services/labels.js b/src/services/labels.js index 7544d799e..1b93acf73 100644 --- a/src/services/labels.js +++ b/src/services/labels.js @@ -3,6 +3,7 @@ const sql = require('./sql'); const utils = require('./utils'); const sync_table = require('./sync_table'); +const repository = require('./repository'); const BUILTIN_LABELS = [ 'frontend_startup', @@ -29,7 +30,7 @@ async function getNoteIdWithLabel(name, value) { AND labels.value = ?`, [name, value]); } -async function getNotesWithLabel(repository, name, value) { +async function getNotesWithLabel(name, value) { let notes; if (value !== undefined) { @@ -44,8 +45,8 @@ async function getNotesWithLabel(repository, name, value) { return notes; } -async function getNoteWithLabel(repository, name, value) { - const notes = getNotesWithLabel(repository, name, value); +async function getNoteWithLabel(name, value) { + const notes = getNotesWithLabel(name, value); return notes.length > 0 ? notes[0] : null; } diff --git a/src/services/repository.js b/src/services/repository.js index 0f30b87c4..b59b6b9c1 100644 --- a/src/services/repository.js +++ b/src/services/repository.js @@ -1,70 +1,73 @@ +"use strict"; + const sql = require('./sql'); -const protected_session = require('./protected_session'); const Note = require('../entities/note'); const NoteRevision = require('../entities/note_revision'); const Branch = require('../entities/branch'); const Label = require('../entities/label'); const sync_table = require('../services/sync_table'); -class Repository { - async getEntities(query, params = []) { - const rows = await sql.getRows(query, params); +async function getEntities(query, params = []) { + const rows = await sql.getRows(query, params); - return rows.map(row => this.createEntityFromRow(row)); - } - - async getEntity(query, params = []) { - const row = await sql.getRowOrNull(query, params); - - if (!row) { - return null; - } - - return this.createEntityFromRow(row); - } - - async getNote(noteId) { - return await this.getEntity("SELECT * FROM notes WHERE noteId = ?", [noteId]); - } - - createEntityFromRow(row) { - let entity; - - if (row.labelId) { - entity = new Label(this, row); - } - else if (row.noteRevisionId) { - entity = new NoteRevision(this, row); - } - else if (row.branchId) { - entity = new Branch(this, row); - } - else if (row.noteId) { - entity = new Note(this, row); - } - else { - throw new Error('Unknown entity type for row: ' + JSON.stringify(row)); - } - - return entity; - } - - async updateEntity(entity) { - if (entity.beforeSaving) { - entity.beforeSaving(); - } - - const clone = Object.assign({}, entity); - - delete clone.jsonContent; - delete clone.repository; - - await sql.replace(entity.constructor.tableName, clone); - - const primaryKey = entity[entity.constructor.primaryKeyName]; - - await sync_table.addEntitySync(entity.constructor.tableName, primaryKey); - } + return rows.map(row => this.createEntityFromRow(row)); } -module.exports = Repository; \ No newline at end of file +async function getEntity(query, params = []) { + const row = await sql.getRowOrNull(query, params); + + if (!row) { + return null; + } + + return this.createEntityFromRow(row); +} + +async function getNote(noteId) { + return await this.getEntity("SELECT * FROM notes WHERE noteId = ?", [noteId]); +} + +function createEntityFromRow(row) { + let entity; + + if (row.labelId) { + entity = new Label(row); + } + else if (row.noteRevisionId) { + entity = new NoteRevision(row); + } + else if (row.branchId) { + entity = new Branch(row); + } + else if (row.noteId) { + entity = new Note(row); + } + else { + throw new Error('Unknown entity type for row: ' + JSON.stringify(row)); + } + + return entity; +} + +async function updateEntity(entity) { + if (entity.beforeSaving) { + entity.beforeSaving(); + } + + const clone = Object.assign({}, entity); + + delete clone.jsonContent; + + await sql.replace(entity.constructor.tableName, clone); + + const primaryKey = entity[entity.constructor.primaryKeyName]; + + await sync_table.addEntitySync(entity.constructor.tableName, primaryKey); +} + +module.exports = { + getEntities, + getEntity, + getNote, + updateEntity +}; \ No newline at end of file diff --git a/src/services/scheduler.js b/src/services/scheduler.js index 102ed120d..72ff18a3b 100644 --- a/src/services/scheduler.js +++ b/src/services/scheduler.js @@ -1,11 +1,9 @@ const script = require('./script'); -const Repository = require('./repository'); +const repository = require('./repository'); const cls = require('./cls'); -const repo = new Repository(); - async function runNotesWithLabel(runAttrValue) { - const notes = await repo.getEntities(` + const notes = await repository.getEntities(` SELECT notes.* FROM notes JOIN labels ON labels.noteId = notes.noteId @@ -17,7 +15,7 @@ async function runNotesWithLabel(runAttrValue) { AND notes.isDeleted = 0`, [runAttrValue]); for (const note of notes) { - script.executeNote(null, note); + script.executeNote(note); } } diff --git a/src/services/script.js b/src/services/script.js index fa256d8d9..d4f58fe90 100644 --- a/src/services/script.js +++ b/src/services/script.js @@ -1,6 +1,6 @@ const sql = require('./sql'); const ScriptContext = require('./script_context'); -const Repository = require('./repository'); +const repository = require('./repository'); async function executeNote(note) { if (!note.isJavaScript()) { @@ -36,7 +36,6 @@ async function executeBundle(bundle, startNote) { * bundle's startNote. */ async function executeScript(script, params, startNoteId, currentNoteId) { - const repository = new Repository(); const startNote = await repository.getNote(startNoteId); const currentNote = await repository.getNote(currentNoteId); diff --git a/src/services/script_context.js b/src/services/script_context.js index af20e8620..fce9f6369 100644 --- a/src/services/script_context.js +++ b/src/services/script_context.js @@ -1,12 +1,11 @@ const log = require('./log'); -const protected_session = require('./protected_session'); const notes = require('./notes'); const sql = require('./sql'); const utils = require('./utils'); const labels = require('./labels'); const date_notes = require('./date_notes'); const config = require('./config'); -const Repository = require('./repository'); +const repository = require('./repository'); const axios = require('axios'); function ScriptContext(startNote, allNotes) { @@ -28,7 +27,6 @@ function ScriptContext(startNote, allNotes) { } function ScriptApi(startNote, currentNote) { - const repository = new Repository(); this.startNote = startNote; this.currentNote = currentNote; @@ -47,7 +45,7 @@ function ScriptApi(startNote, currentNote) { }; this.getNotesWithLabel = async function (attrName, attrValue) { - return await labels.getNotesWithLabel(repository, attrName, attrValue); + return await labels.getNotesWithLabel(attrName, attrValue); }; this.getNoteWithLabel = async function (attrName, attrValue) {