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

@@ -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();
}
}
}