notes are now soft-deleted

This commit is contained in:
azivner 2017-10-22 22:13:24 -04:00
parent 1cc75ad385
commit 3009c5e15e
5 changed files with 42 additions and 34 deletions

View File

@ -0,0 +1 @@
ALTER TABLE notes ADD COLUMN is_deleted INTEGER NOT NULL DEFAULT 0

View File

@ -104,22 +104,24 @@ router.put('/:noteId', async (req, res, next) => {
}); });
router.delete('/: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(); await sql.commit();
res.send({}); 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]); const children = await sql.getResults("select note_id from notes_tree where note_pid = ?", [noteId]);
for (const child of children) { for (const child of children) {
await deleteNote(child['note_id']); await deleteNote(child['note_id']);
} }
await sql.delete("notes_tree", noteId); await sql.remove("notes_tree", noteId);
await sql.delete("notes", noteId); await sql.execute("update notes set is_deleted = 1 where note_id = ?", [noteId]);
await sql.addAudit(audit_category.DELETE_NOTE, req, noteId); await sql.addAudit(audit_category.DELETE_NOTE, req, noteId);
} }

View File

@ -19,6 +19,7 @@ router.get('/', auth.checkApiAuth, async (req, res, next) => {
+ "from notes_tree " + "from notes_tree "
+ "join notes on notes.note_id = notes_tree.note_id " + "join notes on notes.note_id = notes_tree.note_id "
+ "left join notes as clone on notes.note_clone_id = clone.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"); + "order by note_pid, note_pos");
const root_notes = []; const root_notes = [];

View File

@ -2,7 +2,7 @@ const backup = require('./backup');
const sql = require('./sql'); const sql = require('./sql');
const fs = require('fs-extra'); const fs = require('fs-extra');
const APP_DB_VERSION = 2; const APP_DB_VERSION = 3;
const MIGRATIONS_DIR = "./migrations"; const MIGRATIONS_DIR = "./migrations";
async function migrate() { async function migrate() {

View File

@ -6,41 +6,45 @@
</head> </head>
<body> <body>
<div style="width: 800px; margin: auto;"> <div style="width: 800px; margin: auto;">
<h1>Migration</h1> <h1>Migration</h1>
<div id="up-to-date" style="display:none;"> <div id="up-to-date" style="display:none;">
<p>Your database is up-to-date with the application.</p> <p>Your database is up-to-date with the application.</p>
</div>
<div id="need-to-migrate" style="display:none;"> <a href="/" class="btn btn-success">Continue to app</a>
<p>Your database needs to be migrated to new version before you can use the application again. </div>
Database will be backed up before migration in case of something going wrong.</p>
<table class="table table-bordered" style="width: 200px;"> <div id="need-to-migrate" style="display:none;">
<tr> <p>Your database needs to be migrated to new version before you can use the application again.
<th>Application version:</th> Database will be backed up before migration in case of something going wrong.</p>
<td id="app-db-version" style="text-align: right;"></td>
<tr>
<th>Database version:</th>
<td id="db-version" style="text-align: right;"></td>
</tr>
</table>
<button class="btn btn-warning" id="run-migration">Run migration</button> <table class="table table-bordered" style="width: 200px;">
</div> <tr>
<th>Application version:</th>
<td id="app-db-version" style="text-align: right;"></td>
<tr>
<th>Database version:</th>
<td id="db-version" style="text-align: right;"></td>
</tr>
</table>
<div id="migration-result" style="display:none;"> <button class="btn btn-warning" id="run-migration">Run migration</button>
<h2>Migration result</h2> </div>
<table id="migration-table" class="table"> <div id="migration-result" style="display:none;">
<tr> <h2>Migration result</h2>
<th>Database version</th>
<th>Name</th> <table id="migration-table" class="table">
<th>Success</th> <tr>
<th>Error</th> <th>Database version</th>
</tr> <th>Name</th>
</table> <th>Success</th>
</div> <th>Error</th>
</tr>
</table>
<a href="/" class="btn btn-success">Continue to app</a>
</div>
</div> </div>
<script type="text/javascript"> <script type="text/javascript">