Merge remote-tracking branch 'origin/master' into Cleanup_homebrew.api

This commit is contained in:
Trevor Buckner
2026-10-22 14:31:49 +00:00
3 changed files with 23 additions and 20 deletions
+4 -16
View File
@@ -2,7 +2,6 @@
import _ from 'lodash';
import { model as HomebrewModel } from './homebrew.model.js';
import express from 'express';
import zlib from 'zlib';
import GoogleActions from './googleActions.js';
import { hbfm } from 'marked-hbfm';
import * as yaml from 'js-yaml';
@@ -268,13 +267,8 @@ const api = {
if(!googleId) return;
newHomebrew = api.excludeStubProps(newHomebrew);
newHomebrew.googleId = googleId;
} else {
// Compress brew text to binary before saving
newHomebrew.textBin = zlib.deflateRawSync(newHomebrew.text);
// Delete the non-binary text field since it's not needed anymore
newHomebrew.text = undefined;
}
saved = await newHomebrew.save()
.catch((err)=>{
console.error(err, err.toString(), err.stack);
@@ -374,12 +368,13 @@ const api = {
if(failedPatchCount){
throw (`Patch failure: ${failedPatchCount}/${result[1].length} did not apply`);
}
if(decodeURI(result[0]) != brewFromClient.text){
patchedText = decodeURI(result[0]);
if(patchedText != brewFromClient.text){
debugTextMismatch(brewFromClient.text, patchedText, `edit/${brewFromClient.editId}`);
throw ('Patches did not apply cleanly, text mismatch detected');
}
// brew.text = applyPatches(patches, brewFromServer.text)[0];
} catch (err) {
debugTextMismatch(brewFromClient.text, brewFromServer.text, `edit/${brewFromClient.editId}`);
console.error('Failed to apply patches:', {
// patches : brewFromClient.patches,
// result : result,
@@ -423,11 +418,6 @@ const api = {
if(brew.googleId) {
// If google id exists after above actions, Mongo will store only a stub; exclude non-stub properties from update
brew = api.excludeStubProps(brew);
} else {
// Compress brew text to binary before saving
brew.textBin = zlib.deflateRawSync(brew.text);
// Delete the non-binary text field since it's not needed anymore
brew.text = undefined;
}
if(brew._id) // if the brew has a stub id, fetch and merge into Mongo stub document
@@ -504,8 +494,6 @@ const api = {
if(shouldDeleteGoogleBrew) {
// When there are still authors remaining, we delete the google brew but store the full brew in the Homebrewery database
brew.googleId = undefined;
brew.textBin = zlib.deflateRawSync(brew.text);
brew.text = undefined;
}
brew.markModified('authors'); //Mongo will not properly update arrays without markModified()
await brew.save()
+11 -4
View File
@@ -700,8 +700,16 @@ brew`);
shareId : expect.any(String),
style : undefined,
tags : [],
text : undefined,
textBin : expect.objectContaining({}),
text : '```metadata\n' +
'title: asdf\n' +
'bleedSize: {}\n' +
'safetySpace: {}\n' +
'trimSize: {}\n' +
'\n' +
'```\n' +
'\n' +
'asdf',
textBin : undefined,
theme : '5ePHB',
thumbnail : '',
title : 'asdf',
@@ -1233,8 +1241,7 @@ brew`);
expect(saveFunc).toHaveBeenCalled();
expect(saved.authors).toEqual(['test2']);
expect(saved.googleId).toEqual(undefined);
expect(saved.text).toEqual(undefined);
expect(saved.textBin).not.toEqual(undefined);
expect(saved.text).not.toEqual(undefined);
});
it('should retain google brew and update stub when multiple authors and extra author requests deletion', async ()=>{
+8
View File
@@ -32,6 +32,13 @@ const HomebrewSchema = mongoose.Schema({
lock : { type: Object, index: true }
}, { versionKey: false });
HomebrewSchema.pre('save', ()=>{
if(!this.googleId) {
this.textBin = zlib.deflateRawSync(this.text);
this.text = undefined;
}
});
HomebrewSchema.statics.increaseView = async function(query) {
const brew = await Homebrew.findOne(query).exec();
brew.lastViewed = new Date();
@@ -51,6 +58,7 @@ HomebrewSchema.statics.get = async function(query, fields=null){
if(!_.isNil(brew.textBin)) { // Uncompress zipped text field
const unzipped = zlib.inflateRawSync(brew.textBin);
brew.text = unzipped.toString();
brew.textBin = undefined;
}
return brew;
};