From 3009c5e15eb152ee370d4dae8b7dbdcb8f9eb114 Mon Sep 17 00:00:00 2001 From: azivner Date: Sun, 22 Oct 2017 22:13:24 -0400 Subject: [PATCH] notes are now soft-deleted --- migrations/0003__add_is_deleted_to_note.sql | 1 + routes/api/notes.js | 10 ++-- routes/api/tree.js | 1 + services/migration.js | 2 +- views/migration.ejs | 62 +++++++++++---------- 5 files changed, 42 insertions(+), 34 deletions(-) create mode 100644 migrations/0003__add_is_deleted_to_note.sql diff --git a/migrations/0003__add_is_deleted_to_note.sql b/migrations/0003__add_is_deleted_to_note.sql new file mode 100644 index 000000000..8ba0afa7d --- /dev/null +++ b/migrations/0003__add_is_deleted_to_note.sql @@ -0,0 +1 @@ +ALTER TABLE notes ADD COLUMN is_deleted INTEGER NOT NULL DEFAULT 0 \ No newline at end of file diff --git a/routes/api/notes.js b/routes/api/notes.js index f3b6ef80b..dcd828c09 100644 --- a/routes/api/notes.js +++ b/routes/api/notes.js @@ -104,22 +104,24 @@ router.put('/:noteId', async (req, res, next) => { }); router.delete('/:noteId', async (req, res, next) => { - await deleteNote(req.params.noteId); + await sql.beginTransaction(); + + await deleteNote(req.params.noteId, req); await sql.commit(); res.send({}); }); -async function deleteNote(noteId) { +async function deleteNote(noteId, req) { const children = await sql.getResults("select note_id from notes_tree where note_pid = ?", [noteId]); for (const child of children) { await deleteNote(child['note_id']); } - await sql.delete("notes_tree", noteId); - await sql.delete("notes", noteId); + await sql.remove("notes_tree", noteId); + await sql.execute("update notes set is_deleted = 1 where note_id = ?", [noteId]); await sql.addAudit(audit_category.DELETE_NOTE, req, noteId); } diff --git a/routes/api/tree.js b/routes/api/tree.js index 5e5508663..ddcaa17af 100644 --- a/routes/api/tree.js +++ b/routes/api/tree.js @@ -19,6 +19,7 @@ router.get('/', auth.checkApiAuth, async (req, res, next) => { + "from notes_tree " + "join notes on notes.note_id = notes_tree.note_id " + "left join notes as clone on notes.note_clone_id = clone.note_id " + + "where notes.is_deleted = 0 " + "order by note_pid, note_pos"); const root_notes = []; diff --git a/services/migration.js b/services/migration.js index 7b4c5ffb8..986d5313a 100644 --- a/services/migration.js +++ b/services/migration.js @@ -2,7 +2,7 @@ const backup = require('./backup'); const sql = require('./sql'); const fs = require('fs-extra'); -const APP_DB_VERSION = 2; +const APP_DB_VERSION = 3; const MIGRATIONS_DIR = "./migrations"; async function migrate() { diff --git a/views/migration.ejs b/views/migration.ejs index 3c631e707..8fa5075eb 100644 --- a/views/migration.ejs +++ b/views/migration.ejs @@ -6,41 +6,45 @@
-

Migration

+

Migration

- + +