websocket events fill additional data from becca instead of database

This commit is contained in:
zadam 2021-07-25 21:25:06 +02:00
parent f1338bb643
commit a33661d050
3 changed files with 41 additions and 17 deletions

View File

@ -22,8 +22,6 @@ class Attribute {
this.position = row.position;
/** @param {boolean} isInheritable */
this.isInheritable = !!row.isInheritable;
/** @param {boolean} */
this.isDeleted = !!row.isDeleted;
}
/** @returns {NoteShort} */

View File

@ -21,8 +21,6 @@ class Branch {
this.isExpanded = !!row.isExpanded;
/** @param {boolean} */
this.fromSearchNote = !!row.fromSearchNote;
/** @param {boolean} */
this.isDeleted = !!row.isDeleted;
}
/** @returns {NoteShort} */

View File

@ -6,6 +6,8 @@ const cls = require('./cls');
const config = require('./config');
const syncMutexService = require('./sync_mutex');
const protectedSessionService = require('./protected_session');
const becca = require("../becca/becca");
const AbstractEntity = require("../becca/entities/abstract_entity.js");
let webSocketServer;
let lastSyncedPush = null;
@ -75,34 +77,60 @@ function sendMessageToAllClients(message) {
}
function fillInAdditionalProperties(entityChange) {
// most of these could be filled by becca
// the exception is isDeleted - in that case becca doesn't contain such entity at all
// this would have to be handled separately
if (entityChange.isErased) {
return;
}
// fill in some extra data needed by the frontend
// first try to use becca which works for non-deleted entities
// only when that fails try to load from database
if (entityChange.entityName === 'attributes') {
entityChange.entity = sql.getRow(`SELECT * FROM attributes WHERE attributeId = ?`, [entityChange.entityId]);
} else if (entityChange.entityName === 'branches') {
entityChange.entity = sql.getRow(`SELECT * FROM branches WHERE branchId = ?`, [entityChange.entityId]);
} else if (entityChange.entityName === 'notes') {
entityChange.entity = sql.getRow(`SELECT * FROM notes WHERE noteId = ?`, [entityChange.entityId]);
entityChange.entity = becca.getAttribute(entityChange.entityId);
if (entityChange.entity.isProtected) {
entityChange.entity.title = protectedSessionService.decryptString(entityChange.entity.title);
if (!entityChange.entity) {
entityChange.entity = sql.getRow(`SELECT * FROM attributes WHERE attributeId = ?`, [entityChange.entityId]);
}
} else if (entityChange.entityName === 'branches') {
entityChange.entity = becca.getBranch(entityChange.entityId);
if (!entityChange.entity) {
entityChange.entity = sql.getRow(`SELECT * FROM branches WHERE branchId = ?`, [entityChange.entityId]);
}
} else if (entityChange.entityName === 'notes') {
entityChange.entity = becca.getNote(entityChange.entityId);
if (!entityChange.entity) {
entityChange.entity = sql.getRow(`SELECT * FROM notes WHERE noteId = ?`, [entityChange.entityId]);
if (entityChange.entity.isProtected) {
entityChange.entity.title = protectedSessionService.decryptString(entityChange.entity.title);
}
}
} else if (entityChange.entityName === 'note_revisions') {
entityChange.noteId = sql.getValue(`SELECT noteId
FROM note_revisions
WHERE noteRevisionId = ?`, [entityChange.entityId]);
} else if (entityChange.entityName === 'note_reordering') {
entityChange.positions = sql.getMap(`SELECT branchId, notePosition FROM branches WHERE isDeleted = 0 AND parentNoteId = ?`, [entityChange.entityId]);
entityChange.positions = {};
const parentNote = becca.getNote(entityChange.entityId);
if (parentNote) {
for (const childBranch of parentNote.getChildBranches()) {
entityChange.positions[childBranch.branchId] = childBranch.notePosition;
}
}
}
else if (entityChange.entityName === 'options') {
entityChange.entity = sql.getRow(`SELECT * FROM options WHERE name = ?`, [entityChange.entityId]);
entityChange.entity = becca.getOption(entityChange.entityId);
if (!entityChange.entity) {
entityChange.entity = sql.getRow(`SELECT * FROM options WHERE name = ?`, [entityChange.entityId]);
}
}
if (entityChange.entity instanceof AbstractEntity) {
entityChange.entity = entityChange.entity.getPojo();
}
}