From 9860c8deeff1b59ccc215b1622c2534170f5bea8 Mon Sep 17 00:00:00 2001 From: azivner Date: Sat, 13 Jan 2018 20:53:00 -0500 Subject: [PATCH] refactoring of routes - noteId needs to go to /notes noteTreeId to /tree --- public/javascripts/protected_session.js | 2 +- routes/api/notes.js | 35 +++++++++---------------- routes/api/tree.js | 14 ---------- services/tree.js | 31 +++++++++++++++++++++- 4 files changed, 44 insertions(+), 38 deletions(-) diff --git a/public/javascripts/protected_session.js b/public/javascripts/protected_session.js index 521b6bd04..6465f1f1e 100644 --- a/public/javascripts/protected_session.js +++ b/public/javascripts/protected_session.js @@ -142,7 +142,7 @@ const protected_session = (function() { async function protectSubTree(noteId, protect) { await ensureProtectedSession(true, true); - await server.put('tree/' + noteId + "/protect-sub-tree/" + (protect ? 1 : 0)); + await server.put('notes/' + noteId + "/protect-sub-tree/" + (protect ? 1 : 0)); showMessage("Request to un/protect sub tree has finished successfully"); diff --git a/routes/api/notes.js b/routes/api/notes.js index 1a2b83d36..e59a61aba 100644 --- a/routes/api/notes.js +++ b/routes/api/notes.js @@ -8,7 +8,7 @@ const notes = require('../../services/notes'); const log = require('../../services/log'); const protected_session = require('../../services/protected_session'); const data_encryption = require('../../services/data_encryption'); -const sync_table = require('../../services/sync_table'); +const tree = require('../../services/tree'); const wrap = require('express-promise-wrap').wrap; router.get('/:noteId', auth.checkApiAuth, wrap(async (req, res, next) => { @@ -77,28 +77,19 @@ router.put('/:noteId/sort', auth.checkApiAuth, wrap(async (req, res, next) => { const sourceId = req.headers.source_id; const dataKey = protected_session.getDataKey(req); + await tree.sortNotesAlphabetically(noteId, dataKey, sourceId); + + res.send({}); +})); + +router.put('/:noteId/protect-sub-tree/:isProtected', auth.checkApiAuth, wrap(async (req, res, next) => { + const noteId = req.params.noteId; + const isProtected = !!parseInt(req.params.isProtected); + const dataKey = protected_session.getDataKey(req); + const sourceId = req.headers.source_id; + await sql.doInTransaction(async () => { - const notes = await sql.getAll(`SELECT note_tree_id, note_id, note_title, is_protected - FROM notes JOIN notes_tree USING(note_id) WHERE parent_note_id = ?`, [noteId]); - - for (const note of notes) { - if (note.is_protected) { - note.note_title = data_encryption.decryptString(dataKey, data_encryption.noteTitleIv(note.note_id), note.note_title); - } - } - - notes.sort((a, b) => a.note_title.toLowerCase() < b.note_title.toLowerCase() ? -1 : 1); - - let position = 1; - - for (const note of notes) { - await sql.execute("UPDATE notes_tree SET note_position = ? WHERE note_tree_id = ?", - [position, note.note_tree_id]); - - position++; - } - - await sync_table.addNoteReorderingSync(noteId, sourceId); + await notes.protectNoteRecursively(noteId, dataKey, isProtected, sourceId); }); res.send({}); diff --git a/routes/api/tree.js b/routes/api/tree.js index f8539c305..853a0e9a1 100644 --- a/routes/api/tree.js +++ b/routes/api/tree.js @@ -8,7 +8,6 @@ const utils = require('../../services/utils'); const auth = require('../../services/auth'); const protected_session = require('../../services/protected_session'); const data_encryption = require('../../services/data_encryption'); -const notes = require('../../services/notes'); const sync_table = require('../../services/sync_table'); const wrap = require('express-promise-wrap').wrap; @@ -42,19 +41,6 @@ router.get('/', auth.checkApiAuth, wrap(async (req, res, next) => { }); })); -router.put('/:noteId/protect-sub-tree/:isProtected', auth.checkApiAuth, wrap(async (req, res, next) => { - const noteId = req.params.noteId; - const isProtected = !!parseInt(req.params.isProtected); - const dataKey = protected_session.getDataKey(req); - const sourceId = req.headers.source_id; - - await sql.doInTransaction(async () => { - await notes.protectNoteRecursively(noteId, dataKey, isProtected, sourceId); - }); - - res.send({}); -})); - router.put('/:noteTreeId/set-prefix', auth.checkApiAuth, wrap(async (req, res, next) => { const noteTreeId = req.params.noteTreeId; const sourceId = req.headers.source_id; diff --git a/services/tree.js b/services/tree.js index a8152b7a3..77e786fbe 100644 --- a/services/tree.js +++ b/services/tree.js @@ -1,6 +1,8 @@ "use strict"; const sql = require('./sql'); +const sync_table = require('./sync_table'); +const data_encryption = require('./data_encryption'); async function validateParentChild(res, parentNoteId, childNoteId, noteTreeId = null) { const existing = await getExistingNoteTree(parentNoteId, childNoteId); @@ -78,7 +80,34 @@ async function loadSubTreeNoteIds(parentNoteId, subTreeNoteIds) { } } +async function sortNotesAlphabetically(parentNoteId, dataKey, sourceId) { + await sql.doInTransaction(async () => { + const notes = await sql.getAll(`SELECT note_tree_id, note_id, note_title, is_protected + FROM notes JOIN notes_tree USING(note_id) WHERE parent_note_id = ?`, [parentNoteId]); + + for (const note of notes) { + if (note.is_protected) { + note.note_title = data_encryption.decryptString(dataKey, data_encryption.noteTitleIv(note.note_id), note.note_title); + } + } + + notes.sort((a, b) => a.note_title.toLowerCase() < b.note_title.toLowerCase() ? -1 : 1); + + let position = 1; + + for (const note of notes) { + await sql.execute("UPDATE notes_tree SET note_position = ? WHERE note_tree_id = ?", + [position, note.note_tree_id]); + + position++; + } + + await sync_table.addNoteReorderingSync(parentNoteId, sourceId); + }); +} + module.exports = { validateParentChild, - getNoteTree + getNoteTree, + sortNotesAlphabetically }; \ No newline at end of file