fix creating revisions for non-text notes #4176

This commit is contained in:
zadam 2023-09-21 11:38:38 +02:00
parent bb81f110dd
commit a749e24147
4 changed files with 28 additions and 9 deletions

View File

@ -1624,10 +1624,10 @@ class BNote extends AbstractBeccaEntity {
noteContent = noteContent.replaceAll(new RegExp(`href="[^"]*attachmentId=${noteAttachment.attachmentId}[^"]*"`, 'gi'), noteContent = noteContent.replaceAll(new RegExp(`href="[^"]*attachmentId=${noteAttachment.attachmentId}[^"]*"`, 'gi'),
`href="api/attachments/${revisionAttachment.attachmentId}/download"`); `href="api/attachments/${revisionAttachment.attachmentId}/download"`);
} }
revision.setContent(noteContent, {forceSave: true});
} }
revision.setContent(noteContent);
return revision; return revision;
}); });
} }

View File

@ -12,6 +12,7 @@ const BBranch = require('../becca/entities/bbranch');
const revisionService = require('./revisions'); const revisionService = require('./revisions');
const becca = require("../becca/becca"); const becca = require("../becca/becca");
const utils = require("../services/utils"); const utils = require("../services/utils");
const eraseService = require("../services/erase");
const {sanitizeAttributeName} = require("./sanitize_attribute_name"); const {sanitizeAttributeName} = require("./sanitize_attribute_name");
const noteTypes = require("../services/note_types").getNoteTypeNames(); const noteTypes = require("../services/note_types").getNoteTypeNames();
@ -460,19 +461,36 @@ class ConsistencyChecks {
} }
this.findAndFixIssues(` this.findAndFixIssues(`
SELECT revisions.revisionId SELECT revisions.revisionId, blobs.blobId
FROM revisions FROM revisions
LEFT JOIN blobs USING (blobId) LEFT JOIN blobs USING (blobId)
WHERE blobs.blobId IS NULL`, WHERE blobs.blobId IS NULL`,
({revisionId}) => { ({revisionId, blobId}) => {
if (this.autoFix) { if (this.autoFix) {
revisionService.eraseRevisions([revisionId]); revisionService.eraseRevisions([revisionId]);
this.reloadNeeded = true; this.reloadNeeded = true;
logFix(`Note revision content '${revisionId}' was set to erased since its content did not exist.`); logFix(`Note revision '${revisionId}' was erased since the referenced blob '${blobId}' did not exist.`);
} else { } else {
logError(`Note revision content '${revisionId}' does not exist`); logError(`Note revision '${revisionId}' blob '${blobId}' does not exist`);
}
});
this.findAndFixIssues(`
SELECT attachments.attachmentId, blobs.blobId
FROM attachments
LEFT JOIN blobs USING (blobId)
WHERE blobs.blobId IS NULL`,
({attachmentId, blobId}) => {
if (this.autoFix) {
eraseService.eraseAttachments([attachmentId]);
this.reloadNeeded = true;
logFix(`Attachment '${attachmentId}' was erased since the referenced blob '${blobId}' did not exist.`);
} else {
logError(`Attachment '${attachmentId}' blob '${blobId}' does not exist`);
} }
}); });

View File

@ -183,5 +183,6 @@ module.exports = {
eraseDeletedNotesNow, eraseDeletedNotesNow,
eraseUnusedAttachmentsNow, eraseUnusedAttachmentsNow,
eraseNotesWithDeleteId, eraseNotesWithDeleteId,
eraseUnusedBlobs eraseUnusedBlobs,
eraseAttachments
}; };

View File

@ -51,7 +51,7 @@ function eraseRevisions(revisionIdsToErase) {
return; return;
} }
log.info(`Removing note revisions: ${JSON.stringify(revisionIdsToErase)}`); log.info(`Removing revisions: ${JSON.stringify(revisionIdsToErase)}`);
sql.executeMany(`DELETE FROM revisions WHERE revisionId IN (???)`, revisionIdsToErase); sql.executeMany(`DELETE FROM revisions WHERE revisionId IN (???)`, revisionIdsToErase);
sql.executeMany(`UPDATE entity_changes SET isErased = 1, utcDateChanged = '${dateUtils.utcNowDateTime()}' WHERE entityName = 'revisions' AND entityId IN (???)`, revisionIdsToErase); sql.executeMany(`UPDATE entity_changes SET isErased = 1, utcDateChanged = '${dateUtils.utcNowDateTime()}' WHERE entityName = 'revisions' AND entityId IN (???)`, revisionIdsToErase);