diff --git a/db/migrations/0217__note_attachments.sql b/db/migrations/0217__attachments.sql similarity index 61% rename from db/migrations/0217__note_attachments.sql rename to db/migrations/0217__attachments.sql index 9ca952ba9..9e2f821da 100644 --- a/db/migrations/0217__note_attachments.sql +++ b/db/migrations/0217__attachments.sql @@ -1,6 +1,6 @@ -CREATE TABLE IF NOT EXISTS "note_attachments" +CREATE TABLE IF NOT EXISTS "attachments" ( - noteAttachmentId TEXT not null primary key, + attachmentId TEXT not null primary key, parentId TEXT not null, role TEXT not null, mime TEXT not null, @@ -11,5 +11,5 @@ CREATE TABLE IF NOT EXISTS "note_attachments" isDeleted INT not null, deleteId TEXT DEFAULT NULL); -CREATE UNIQUE INDEX IDX_note_attachments_parentId_role - on note_attachments (parentId, role); +CREATE UNIQUE INDEX IDX_attachments_parentId_role + on attachments (parentId, role); diff --git a/db/schema.sql b/db/schema.sql index 10008f2b2..5b8a8379b 100644 --- a/db/schema.sql +++ b/db/schema.sql @@ -35,34 +35,26 @@ CREATE TABLE IF NOT EXISTS "notes" ( `isProtected` INT NOT NULL DEFAULT 0, `type` TEXT NOT NULL DEFAULT 'text', `mime` TEXT NOT NULL DEFAULT 'text/html', + `blobId` TEXT DEFAULT NULL, `isDeleted` INT NOT NULL DEFAULT 0, `deleteId` TEXT DEFAULT NULL, `dateCreated` TEXT NOT NULL, `dateModified` TEXT NOT NULL, `utcDateCreated` TEXT NOT NULL, - `utcDateModified` TEXT NOT NULL, + `utcDateModified` TEXT NOT NULL PRIMARY KEY(`noteId`)); -CREATE TABLE IF NOT EXISTS "note_contents" ( - `noteId` TEXT NOT NULL, - `content` TEXT NULL DEFAULT NULL, - `dateModified` TEXT NOT NULL, - `utcDateModified` TEXT NOT NULL, - PRIMARY KEY(`noteId`) -); CREATE TABLE IF NOT EXISTS "note_revisions" (`noteRevisionId` TEXT NOT NULL PRIMARY KEY, `noteId` TEXT NOT NULL, type TEXT DEFAULT '' NOT NULL, mime TEXT DEFAULT '' NOT NULL, `title` TEXT NOT NULL, `isProtected` INT NOT NULL DEFAULT 0, + `blobId` TEXT DEFAULT NULL, `utcDateLastEdited` TEXT NOT NULL, `utcDateCreated` TEXT NOT NULL, `utcDateModified` TEXT NOT NULL, `dateLastEdited` TEXT NOT NULL, `dateCreated` TEXT NOT NULL); -CREATE TABLE IF NOT EXISTS "note_revision_contents" (`noteRevisionId` TEXT NOT NULL PRIMARY KEY, - `content` TEXT, - `utcDateModified` TEXT NOT NULL); CREATE TABLE IF NOT EXISTS "options" ( name TEXT not null PRIMARY KEY, @@ -112,18 +104,17 @@ CREATE TABLE IF NOT EXISTS "recent_notes" notePath TEXT not null, utcDateCreated TEXT not null ); -CREATE TABLE IF NOT EXISTS "note_attachments" +CREATE TABLE IF NOT EXISTS "attachments" ( - noteAttachmentId TEXT not null primary key, - noteId TEXT not null, - name TEXT not null, + attachmentId TEXT not null primary key, + parentId TEXT not null, + role TEXT not null, mime TEXT not null, + title TEXT not null, isProtected INT not null DEFAULT 0, + blobId TEXT not null, utcDateModified TEXT not null, isDeleted INT not null, - `deleteId` TEXT DEFAULT NULL); - -CREATE INDEX IDX_note_attachments_name - on note_attachments (name); -CREATE UNIQUE INDEX IDX_note_attachments_noteId_name - on note_attachments (noteId, name); + deleteId TEXT DEFAULT NULL); +CREATE UNIQUE INDEX IDX_attachments_parentId_role + on attachments (parentId, role); diff --git a/src/becca/becca.js b/src/becca/becca.js index 72b325266..42ec60da3 100644 --- a/src/becca/becca.js +++ b/src/becca/becca.js @@ -121,12 +121,12 @@ class Becca { return row ? new BNoteRevision(row) : null; } - /** @returns {BNoteAttachment|null} */ - getNoteAttachment(noteAttachmentId) { - const row = sql.getRow("SELECT * FROM note_attachments WHERE noteAttachmentId = ?", [noteAttachmentId]); + /** @returns {BAttachment|null} */ + getAttachment(attachmentId) { + const row = sql.getRow("SELECT * FROM attachments WHERE attachmentId = ?", [attachmentId]); - const BNoteAttachment = require("./entities/bnote_attachment"); // avoiding circular dependency problems - return row ? new BNoteAttachment(row) : null; + const BAttachment = require("./entities/battachment"); // avoiding circular dependency problems + return row ? new BAttachment(row) : null; } /** @returns {BOption|null} */ @@ -151,8 +151,8 @@ class Becca { if (entityName === 'note_revisions') { return this.getNoteRevision(entityId); - } else if (entityName === 'note_attachments') { - return this.getNoteAttachment(entityId); + } else if (entityName === 'attachments') { + return this.getAttachment(entityId); } const camelCaseEntityName = entityName.toLowerCase().replace(/(_[a-z])/g, diff --git a/src/becca/entities/bnote_attachment.js b/src/becca/entities/battachment.js similarity index 72% rename from src/becca/entities/bnote_attachment.js rename to src/becca/entities/battachment.js index e568b358a..bcdde8302 100644 --- a/src/becca/entities/bnote_attachment.js +++ b/src/becca/entities/battachment.js @@ -9,31 +9,31 @@ const entityChangesService = require('../../services/entity_changes'); const AbstractBeccaEntity = require("./abstract_becca_entity"); /** - * NoteAttachment represent data related/attached to the note. Conceptually similar to attributes, but intended for + * Attachment represent data related/attached to the note. Conceptually similar to attributes, but intended for * larger amounts of data and generally not accessible to the user. * * @extends AbstractBeccaEntity */ -class BNoteAttachment extends AbstractBeccaEntity { - static get entityName() { return "note_attachments"; } - static get primaryKeyName() { return "noteAttachmentId"; } - static get hashedProperties() { return ["noteAttachmentId", "parentId", "role", "mime", "title", "utcDateModified"]; } +class BAttachment extends AbstractBeccaEntity { + static get entityName() { return "attachments"; } + static get primaryKeyName() { return "attachmentId"; } + static get hashedProperties() { return ["attachmentId", "parentId", "role", "mime", "title", "utcDateModified"]; } constructor(row) { super(); if (!row.parentId?.trim()) { - throw new Error("'noteId' must be given to initialize a NoteAttachment entity"); + throw new Error("'noteId' must be given to initialize a Attachment entity"); } else if (!row.role?.trim()) { - throw new Error("'role' must be given to initialize a NoteAttachment entity"); + throw new Error("'role' must be given to initialize a Attachment entity"); } else if (!row.mime?.trim()) { - throw new Error("'mime' must be given to initialize a NoteAttachment entity"); + throw new Error("'mime' must be given to initialize a Attachment entity"); } else if (!row.title?.trim()) { - throw new Error("'title' must be given to initialize a NoteAttachment entity"); + throw new Error("'title' must be given to initialize a Attachment entity"); } /** @type {string} needs to be set at the initialization time since it's used in the .setContent() */ - this.noteAttachmentId = row.noteAttachmentId || `${this.noteId}_${this.name}`; // FIXME + this.attachmentId = row.attachmentId || `${this.noteId}_${this.name}`; // FIXME /** @type {string} either noteId or noteRevisionId to which this attachment belongs */ this.parentId = row.parentId; /** @type {string} */ @@ -59,14 +59,14 @@ class BNoteAttachment extends AbstractBeccaEntity { /** @returns {*} */ getContent(silentNotFoundError = false) { - const res = sql.getRow(`SELECT content FROM note_attachment_contents WHERE noteAttachmentId = ?`, [this.noteAttachmentId]); + const res = sql.getRow(`SELECT content FROM attachment_contents WHERE attachmentId = ?`, [this.attachmentId]); if (!res) { if (silentNotFoundError) { return undefined; } else { - throw new Error(`Cannot find note attachment content for noteAttachmentId=${this.noteAttachmentId}`); + throw new Error(`Cannot find note attachment content for attachmentId=${this.attachmentId}`); } } @@ -93,10 +93,10 @@ class BNoteAttachment extends AbstractBeccaEntity { setContent(content) { sql.transactional(() => { - this.save(); // also explicitly save note_attachment to update contentCheckSum + this.save(); // also explicitly save attachment to update contentCheckSum const pojo = { - noteAttachmentId: this.noteAttachmentId, + attachmentId: this.attachmentId, content: content, utcDateModified: dateUtils.utcNowDateTime() }; @@ -105,15 +105,15 @@ class BNoteAttachment extends AbstractBeccaEntity { if (protectedSessionService.isProtectedSessionAvailable()) { pojo.content = protectedSessionService.encrypt(pojo.content); } else { - throw new Error(`Cannot update content of noteAttachmentId=${this.noteAttachmentId} since we're out of protected session.`); + throw new Error(`Cannot update content of attachmentId=${this.attachmentId} since we're out of protected session.`); } } - sql.upsert("note_attachment_contents", "noteAttachmentId", pojo); + sql.upsert("attachment_contents", "attachmentId", pojo); entityChangesService.addEntityChange({ - entityName: 'note_attachment_contents', - entityId: this.noteAttachmentId, + entityName: 'attachment_contents', + entityId: this.attachmentId, hash: this.contentCheckSum, // FIXME isErased: false, utcDateChanged: pojo.utcDateModified, @@ -123,7 +123,7 @@ class BNoteAttachment extends AbstractBeccaEntity { } calculateCheckSum(content) { - return utils.hash(`${this.noteAttachmentId}|${content.toString()}`); + return utils.hash(`${this.attachmentId}|${content.toString()}`); } beforeSaving() { @@ -131,7 +131,7 @@ class BNoteAttachment extends AbstractBeccaEntity { throw new Error(`Name must be alphanumerical, "${this.name}" given.`); } - this.noteAttachmentId = `${this.noteId}_${this.name}`; // FIXME + this.attachmentId = `${this.noteId}_${this.name}`; // FIXME super.beforeSaving(); @@ -140,7 +140,7 @@ class BNoteAttachment extends AbstractBeccaEntity { getPojo() { return { - noteAttachmentId: this.noteAttachmentId, + attachmentId: this.attachmentId, parentId: this.parentId, name: this.name, mime: this.mime, @@ -159,4 +159,4 @@ class BNoteAttachment extends AbstractBeccaEntity { } } -module.exports = BNoteAttachment; +module.exports = BAttachment; diff --git a/src/becca/entities/bbranch.js b/src/becca/entities/bbranch.js index f1ad72dc3..38290e4ab 100644 --- a/src/becca/entities/bbranch.js +++ b/src/becca/entities/bbranch.js @@ -198,8 +198,8 @@ class BBranch extends AbstractBeccaEntity { relation.markAsDeleted(deleteId); } - for (const noteAttachment of note.getNoteAttachments()) { - noteAttachment.markAsDeleted(deleteId); + for (const attachment of note.getAttachments()) { + attachment.markAsDeleted(deleteId); } note.markAsDeleted(deleteId); diff --git a/src/becca/entities/bnote.js b/src/becca/entities/bnote.js index 4707720f6..f491235fa 100644 --- a/src/becca/entities/bnote.js +++ b/src/becca/entities/bnote.js @@ -8,7 +8,7 @@ const dateUtils = require('../../services/date_utils'); const entityChangesService = require('../../services/entity_changes'); const AbstractBeccaEntity = require("./abstract_becca_entity"); const BNoteRevision = require("./bnote_revision"); -const BNoteAttachment = require("./bnote_attachment"); +const BAttachment = require("./battachment"); const TaskContext = require("../../services/task_context"); const dayjs = require("dayjs"); const utc = require('dayjs/plugin/utc'); @@ -1161,16 +1161,16 @@ class BNote extends AbstractBeccaEntity { .map(row => new BNoteRevision(row)); } - /** @returns {BNoteAttachment[]} */ - getNoteAttachments() { - return sql.getRows("SELECT * FROM note_attachments WHERE noteId = ? AND isDeleted = 0", [this.noteId]) - .map(row => new BNoteAttachment(row)); + /** @returns {BAttachment[]} */ + getAttachments() { + return sql.getRows("SELECT * FROM attachments WHERE noteId = ? AND isDeleted = 0", [this.noteId]) + .map(row => new BAttachment(row)); } - /** @returns {BNoteAttachment|undefined} */ - getNoteAttachmentByName(name) { - return sql.getRows("SELECT * FROM note_attachments WHERE noteId = ? AND name = ? AND isDeleted = 0", [this.noteId, name]) - .map(row => new BNoteAttachment(row)) + /** @returns {BAttachment|undefined} */ + getAttachmentByName(name) { + return sql.getRows("SELECT * FROM attachments WHERE noteId = ? AND name = ? AND isDeleted = 0", [this.noteId, name]) + .map(row => new BAttachment(row)) [0]; } @@ -1502,21 +1502,21 @@ class BNote extends AbstractBeccaEntity { } /** - * @returns {BNoteAttachment} + * @returns {BAttachment} */ - saveNoteAttachment(name, mime, content) { - let noteAttachment = this.getNoteAttachmentByName(name); + saveAttachment(name, mime, content) { + let attachment = this.getAttachmentByName(name); - noteAttachment = new BNoteAttachment({ + attachment = new BAttachment({ noteId: this.noteId, name, mime, isProtected: this.isProtected }); - noteAttachment.setContent(content); + attachment.setContent(content); - return noteAttachment; + return attachment; } beforeSaving() { diff --git a/src/becca/entity_constructor.js b/src/becca/entity_constructor.js index ba87fa0f1..bd4e125bf 100644 --- a/src/becca/entity_constructor.js +++ b/src/becca/entity_constructor.js @@ -1,6 +1,6 @@ const BNote = require('./entities/bnote'); const BNoteRevision = require('./entities/bnote_revision'); -const BNoteAttachment = require("./entities/bnote_attachment"); +const BAttachment = require("./entities/battachment"); const BBranch = require('./entities/bbranch'); const BAttribute = require('./entities/battribute'); const BRecentNote = require('./entities/brecent_note'); @@ -12,7 +12,7 @@ const ENTITY_NAME_TO_ENTITY = { "branches": BBranch, "notes": BNote, "note_revisions": BNoteRevision, - "note_attachments": BNoteAttachment, + "attachments": BAttachment, "recent_notes": BRecentNote, "etapi_tokens": BEtapiToken, "options": BOption diff --git a/src/public/app/services/froca_updater.js b/src/public/app/services/froca_updater.js index 56c654723..f0587e4a6 100644 --- a/src/public/app/services/froca_updater.js +++ b/src/public/app/services/froca_updater.js @@ -34,7 +34,7 @@ async function processEntityChanges(entityChanges) { loadResults.addOption(ec.entity.name); } - else if (['etapi_tokens', 'note_attachments'].includes(ec.entityName)) { + else if (['etapi_tokens', 'attachments'].includes(ec.entityName)) { // NOOP } else { diff --git a/src/public/app/widgets/buttons/note_actions.js b/src/public/app/widgets/buttons/note_actions.js index 66fd16e15..4c0a2340f 100644 --- a/src/public/app/widgets/buttons/note_actions.js +++ b/src/public/app/widgets/buttons/note_actions.js @@ -28,7 +28,7 @@ const TPL = ` Re-render note Search in note Note source - Note attachments + Note attachments Open note externally Import files Export note diff --git a/src/routes/api/notes.js b/src/routes/api/notes.js index d7f8ddfc4..2e9bb12c7 100644 --- a/src/routes/api/notes.js +++ b/src/routes/api/notes.js @@ -127,7 +127,7 @@ function setNoteTypeMime(req) { note.save(); } -function getNoteAttachments(req) { +function getAttachments(req) { const includeContent = req.query.includeContent === 'true'; const {noteId} = req.params; @@ -137,9 +137,9 @@ function getNoteAttachments(req) { throw new NotFoundError(`Note '${noteId}' doesn't exist.`); } - const noteAttachments = note.getNoteAttachments(); + const attachments = note.getAttachments(); - return noteAttachments.map(attachment => { + return attachments.map(attachment => { const pojo = attachment.getPojo(); if (includeContent && utils.isStringNote(null, attachment.mime)) { @@ -157,7 +157,7 @@ function getNoteAttachments(req) { }); } -function saveNoteAttachment(req) { +function saveAttachment(req) { const {noteId, name} = req.params; const {mime, content} = req.body; @@ -167,7 +167,7 @@ function saveNoteAttachment(req) { throw new NotFoundError(`Note '${noteId}' doesn't exist.`); } - note.saveNoteAttachment(name, mime, content); + note.saveAttachment(name, mime, content); } function getRelationMap(req) { @@ -384,6 +384,6 @@ module.exports = { getDeleteNotesPreview, uploadModifiedFile, forceSaveNoteRevision, - getNoteAttachments, - saveNoteAttachment + getAttachments, + saveAttachment }; diff --git a/src/routes/api/sync.js b/src/routes/api/sync.js index 92373acf7..0df3a156b 100644 --- a/src/routes/api/sync.js +++ b/src/routes/api/sync.js @@ -113,9 +113,9 @@ function forceNoteSync(req) { entityChangesService.moveEntityChangeToTop('note_revisions', noteRevisionId); } - for (const noteAttachmentId of sql.getColumn("SELECT noteAttachmentId FROM note_attachments WHERE noteId = ?", [noteId])) { - sql.execute(`UPDATE note_attachments SET utcDateModified = ? WHERE noteAttachmentId = ?`, [now, noteAttachmentId]); - entityChangesService.moveEntityChangeToTop('note_attachments', noteAttachmentId); + for (const attachmentId of sql.getColumn("SELECT attachmentId FROM attachments WHERE noteId = ?", [noteId])) { + sql.execute(`UPDATE attachments SET utcDateModified = ? WHERE attachmentId = ?`, [now, attachmentId]); + entityChangesService.moveEntityChangeToTop('attachments', attachmentId); } log.info(`Forcing note sync for ${noteId}`); diff --git a/src/routes/routes.js b/src/routes/routes.js index 07d56beac..979916551 100644 --- a/src/routes/routes.js +++ b/src/routes/routes.js @@ -126,8 +126,8 @@ function register(app) { apiRoute(PUT, '/api/notes/:noteId/sort-children', notesApiRoute.sortChildNotes); apiRoute(PUT, '/api/notes/:noteId/protect/:isProtected', notesApiRoute.protectNote); apiRoute(PUT, '/api/notes/:noteId/type', notesApiRoute.setNoteTypeMime); - apiRoute(GET, '/api/notes/:noteId/attachments', notesApiRoute.getNoteAttachments); - apiRoute(PUT, '/api/notes/:noteId/attachments/:name', notesApiRoute.saveNoteAttachment); + apiRoute(GET, '/api/notes/:noteId/attachments', notesApiRoute.getAttachments); + apiRoute(PUT, '/api/notes/:noteId/attachments/:name', notesApiRoute.saveAttachment); apiRoute(GET, '/api/notes/:noteId/revisions', noteRevisionsApiRoute.getNoteRevisions); apiRoute(DELETE, '/api/notes/:noteId/revisions', noteRevisionsApiRoute.eraseAllNoteRevisions); apiRoute(GET, '/api/notes/:noteId/revisions/:noteRevisionId', noteRevisionsApiRoute.getNoteRevision); diff --git a/src/services/note_attachments.js b/src/services/attachments.js similarity index 55% rename from src/services/note_attachments.js rename to src/services/attachments.js index 4d9aca9a5..b6b3d3ed5 100644 --- a/src/services/note_attachments.js +++ b/src/services/attachments.js @@ -4,9 +4,9 @@ const log = require("./log"); /** * @param {BNote} note */ -function protectNoteAttachments(note) { - for (const noteAttachment of note.getNoteAttachments()) { - if (note.isProtected !== noteAttachment.isProtected) { +function protectAttachments(note) { + for (const attachment of note.getAttachments()) { + if (note.isProtected !== attachment.isProtected) { if (!protectedSession.isProtectedSessionAvailable()) { log.error("Protected session is not available to fix note attachments."); @@ -14,17 +14,17 @@ function protectNoteAttachments(note) { } try { - const content = noteAttachment.getContent(); + const content = attachment.getContent(); - noteAttachment.isProtected = note.isProtected; + attachment.isProtected = note.isProtected; // this will force de/encryption - noteAttachment.setContent(content); + attachment.setContent(content); - noteAttachment.save(); + attachment.save(); } catch (e) { - log.error(`Could not un/protect note attachment ID = ${noteAttachment.noteAttachmentId}`); + log.error(`Could not un/protect note attachment ID = ${attachment.attachmentId}`); throw e; } @@ -33,5 +33,5 @@ function protectNoteAttachments(note) { } module.exports = { - protectNoteAttachments + protectAttachments } diff --git a/src/services/consistency_checks.js b/src/services/consistency_checks.js index 0f7f04abf..002c5206c 100644 --- a/src/services/consistency_checks.js +++ b/src/services/consistency_checks.js @@ -214,24 +214,25 @@ class ConsistencyChecks { } }); - this.findAndFixIssues(` - SELECT noteAttachmentId, note_attachments.noteId AS noteId - FROM note_attachments - LEFT JOIN notes ON notes.noteId = note_attachments.parentId - WHERE notes.noteId IS NULL - AND note_attachments.isDeleted = 0`, - ({noteAttachmentId, noteId}) => { - if (this.autoFix) { - const noteAttachment = becca.getNoteAttachment(noteAttachmentId); - noteAttachment.markAsDeleted(); - - this.reloadNeeded = false; - - logFix(`Note attachment '${noteAttachmentId}' has been deleted since it references missing note '${noteId}'`); - } else { - logError(`Note attachment '${noteAttachmentId}' references missing note '${noteId}'`); - } - }); + // FIXME + // this.findAndFixIssues(` + // SELECT attachmentId, attachments.parentId AS noteId + // FROM attachments + // LEFT JOIN notes ON notes.noteId = attachments.parentId + // WHERE notes.noteId IS NULL + // AND attachments.isDeleted = 0`, + // ({attachmentId, noteId}) => { + // if (this.autoFix) { + // const attachment = becca.getAttachment(attachmentId); + // attachment.markAsDeleted(); + // + // this.reloadNeeded = false; + // + // logFix(`Note attachment '${attachmentId}' has been deleted since it references missing note '${noteId}'`); + // } else { + // logError(`Note attachment '${attachmentId}' references missing note '${noteId}'`); + // } + // }); } findExistencyIssues() { @@ -341,22 +342,22 @@ class ConsistencyChecks { }); this.findAndFixIssues(` - SELECT noteAttachmentId, - note_attachments.noteId AS noteId - FROM note_attachments - JOIN notes USING (noteId) + SELECT attachmentId, + attachments.parentId AS noteId + FROM attachments + JOIN notes ON notes.noteId = attachments.parentId WHERE notes.isDeleted = 1 - AND note_attachments.isDeleted = 0`, - ({noteAttachmentId, noteId}) => { + AND attachments.isDeleted = 0`, + ({attachmentId, noteId}) => { if (this.autoFix) { - const noteAttachment = becca.getNoteAttachment(noteAttachmentId); - noteAttachment.markAsDeleted(); + const attachment = becca.getAttachment(attachmentId); + attachment.markAsDeleted(); this.reloadNeeded = false; - logFix(`Note attachment '${noteAttachmentId}' has been deleted since associated note '${noteId}' is deleted.`); + logFix(`Note attachment '${attachmentId}' has been deleted since associated note '${noteId}' is deleted.`); } else { - logError(`Note attachment '${noteAttachmentId}' is not deleted even though associated note '${noteId}' is deleted.`) + logError(`Note attachment '${attachmentId}' is not deleted even though associated note '${noteId}' is deleted.`) } }); } @@ -657,7 +658,7 @@ class ConsistencyChecks { findEntityChangeIssues() { this.runEntityChangeChecks("notes", "noteId"); this.runEntityChangeChecks("note_revisions", "noteRevisionId"); - this.runEntityChangeChecks("note_attachments", "noteAttachmentId"); + this.runEntityChangeChecks("attachments", "attachmentId"); this.runEntityChangeChecks("blobs", "blobId"); this.runEntityChangeChecks("branches", "branchId"); this.runEntityChangeChecks("attributes", "attributeId"); @@ -754,7 +755,7 @@ class ConsistencyChecks { return `${tableName}: ${count}`; } - const tables = [ "notes", "note_revisions", "note_attachments", "branches", "attributes", "etapi_tokens" ]; + const tables = [ "notes", "note_revisions", "attachments", "branches", "attributes", "etapi_tokens" ]; log.info(`Table counts: ${tables.map(tableName => getTableRowCount(tableName)).join(", ")}`); } diff --git a/src/services/entity_changes.js b/src/services/entity_changes.js index fb645e92a..51fad2520 100644 --- a/src/services/entity_changes.js +++ b/src/services/entity_changes.js @@ -149,7 +149,7 @@ function fillAllEntityChanges() { fillEntityChanges("notes", "noteId"); fillEntityChanges("branches", "branchId"); fillEntityChanges("note_revisions", "noteRevisionId"); - fillEntityChanges("note_attachments", "noteAttachmentId"); + fillEntityChanges("attachments", "attachmentId"); fillEntityChanges("blobs", "blobId"); fillEntityChanges("attributes", "attributeId"); fillEntityChanges("etapi_tokens", "etapiTokenId"); diff --git a/src/services/export/zip.js b/src/services/export/zip.js index 7b5c49427..a40bca8bd 100644 --- a/src/services/export/zip.js +++ b/src/services/export/zip.js @@ -170,7 +170,7 @@ async function exportToZip(taskContext, branch, format, res, setHeaders = true) meta.dataFileName = getDataFileName(note.type, note.mime, baseFileName, existingFileNames); } - const attachments = note.getNoteAttachments(); + const attachments = note.getAttachments(); if (attachments.length > 0) { meta.attachments = attachments @@ -339,8 +339,8 @@ ${markdownContent}`; for (const attachmentMeta of noteMeta.attachments || []) { // FIXME - const noteAttachment = note.getNoteAttachmentByName(attachmentMeta.name); - const content = noteAttachment.getContent(); + const attachment = note.getAttachmentByName(attachmentMeta.name); + const content = attachment.getContent(); archive.append(content, { name: filePathPrefix + attachmentMeta.dataFileName, diff --git a/src/services/import/zip.js b/src/services/import/zip.js index 1effc29d0..fb3c2a50b 100644 --- a/src/services/import/zip.js +++ b/src/services/import/zip.js @@ -14,7 +14,7 @@ const treeService = require("../tree"); const yauzl = require("yauzl"); const htmlSanitizer = require('../html_sanitizer'); const becca = require("../../becca/becca"); -const BNoteAttachment = require("../../becca/entities/bnote_attachment"); +const BAttachment = require("../../becca/entities/battachment"); /** * @param {TaskContext} taskContext @@ -379,14 +379,14 @@ async function importZip(taskContext, fileBuffer, importRootNote) { const noteId = getNoteId(noteMeta, filePath); if (attachmentMeta) { - const noteAttachment = new BNoteAttachment({ + const attachment = new BAttachment({ parentId: noteId, title: attachmentMeta.title, role: attachmentMeta.role, mime: attachmentMeta.mime }); - noteAttachment.setContent(content); + attachment.setContent(content); return; } diff --git a/src/services/sync_update.js b/src/services/sync_update.js index 1ee03eb11..c10d6479d 100644 --- a/src/services/sync_update.js +++ b/src/services/sync_update.js @@ -114,7 +114,7 @@ function eraseEntity(entityChange, instanceId) { "branches", "attributes", "note_revisions", - "note_attachments", + "attachments", "blobs", ]; diff --git a/src/services/ws.js b/src/services/ws.js index 9d0266b5b..b54a8fb02 100644 --- a/src/services/ws.js +++ b/src/services/ws.js @@ -152,7 +152,7 @@ const ORDERING = { "blobs": 0, "note_reordering": 2, "note_revisions": 2, - "note_attachments": 3, + "attachments": 3, "notes": 1, "options": 0 };