delete attributes when deleting note

This commit is contained in:
azivner 2018-08-15 15:27:22 +02:00
parent 3204291463
commit 4513651e12
5 changed files with 35 additions and 2 deletions

View file

@ -7,6 +7,6 @@ instanceName=
port=8080
# true for TLS/SSL/HTTPS (secure), false for HTTP (unsecure).
https=false
# path to certificate (run "bash generate-cert.sh" to generate self-signed certificate). Relevant only if https=true
# path to certificate (run "bash bin/generate-cert.sh" to generate self-signed certificate). Relevant only if https=true
certPath=
keyPath=

View file

@ -34,7 +34,12 @@ function getNotePath(node) {
async function getNoteTitle(noteId, parentNoteId = null) {
utils.assertArguments(noteId);
let {title} = await treeCache.getNote(noteId);
const note = await treeCache.getNote(noteId);
if (!note) {
return "[not found]";
}
let {title} = note;
if (parentNoteId !== null) {
const branch = await treeCache.getBranchByChildParent(noteId, parentNoteId);

View file

@ -79,6 +79,9 @@ async function importTar(file, parentNoteId) {
const noteIdMap = {};
await importNotes(files, parentNoteId, noteIdMap);
// import might contain relations targeting notes which are not in the import
await attributeService.removeInvalidRelations();
}
function getFileName(name) {

View file

@ -77,11 +77,31 @@ async function getAttributeNames(type, nameLike) {
return names;
}
async function removeInvalidRelations() {
const relations = await repository.getEntities(`
SELECT attributes.*
FROM attributes
LEFT JOIN notes AS sourceNote ON attributes.noteId = sourceNote.noteId
LEFT JOIN notes AS targetNote ON attributes.value = targetNote.noteId
WHERE
attributes.isDeleted = 0
AND attributes.type = 'relation'
AND (sourceNote.noteId IS NULL OR sourceNote.isDeleted
OR targetNote.noteId IS NULL OR targetNote.isDeleted)`);
for (const relation of relations) {
relation.isDeleted = true;
await relation.save();
}
}
module.exports = {
getNotesWithLabel,
getNoteWithLabel,
createLabel,
createAttribute,
getAttributeNames,
removeInvalidRelations,
BUILTIN_ATTRIBUTES
};

View file

@ -250,6 +250,11 @@ async function deleteNote(branch) {
for (const childBranch of await note.getChildBranches()) {
await deleteNote(childBranch);
}
for (const attribute of await note.getOwnedAttributes()) {
attribute.isDeleted = true;
await attribute.save();
}
}
}