From 55c91217aba07b530596910bf12b4fb18554fc1d Mon Sep 17 00:00:00 2001 From: Charlie Humphreys Date: Wed, 25 May 2022 03:03:43 +0000 Subject: [PATCH] fix deletion, update urls --- .../basePages/listPage/brewItem/brewItem.jsx | 2 +- client/homebrew/pages/editPage/editPage.jsx | 6 ++--- client/homebrew/pages/sharePage/sharePage.jsx | 2 +- server/app.js | 2 +- server/homebrew.api.js | 23 +++++++++++++++---- 5 files changed, 23 insertions(+), 12 deletions(-) diff --git a/client/homebrew/pages/basePages/listPage/brewItem/brewItem.jsx b/client/homebrew/pages/basePages/listPage/brewItem/brewItem.jsx index 7f614c2c4..5756b0df1 100644 --- a/client/homebrew/pages/basePages/listPage/brewItem/brewItem.jsx +++ b/client/homebrew/pages/basePages/listPage/brewItem/brewItem.jsx @@ -76,7 +76,7 @@ const BrewItem = createClass({ if(!this.props.brew.shareId) return; let shareLink = this.props.brew.shareId; - if(this.props.brew.googleId) { + if(this.props.brew.googleId && !this.props.brew.stubbed) { shareLink = this.props.brew.googleId + shareLink; } diff --git a/client/homebrew/pages/editPage/editPage.jsx b/client/homebrew/pages/editPage/editPage.jsx index 9ef33f165..f8ac70a5d 100644 --- a/client/homebrew/pages/editPage/editPage.jsx +++ b/client/homebrew/pages/editPage/editPage.jsx @@ -210,9 +210,7 @@ const EditPage = createClass({ }); this.savedBrew = res.body; - if(transfer) { - history.replaceState(null, null, `/edit/${this.savedBrew.editId}`); - } + history.replaceState(null, null, `/edit/${this.savedBrew.editId}`); this.setState((prevState)=>({ brew : _.merge({}, prevState.brew, { @@ -340,7 +338,7 @@ const EditPage = createClass({ }, processShareId : function() { - return this.state.brew.googleId ? + return this.state.brew.googleId && !this.state.brew.stubbed ? this.state.brew.googleId + this.state.brew.shareId : this.state.brew.shareId; }, diff --git a/client/homebrew/pages/sharePage/sharePage.jsx b/client/homebrew/pages/sharePage/sharePage.jsx index 372dbbc2c..c983512ad 100644 --- a/client/homebrew/pages/sharePage/sharePage.jsx +++ b/client/homebrew/pages/sharePage/sharePage.jsx @@ -49,7 +49,7 @@ const SharePage = createClass({ }, processShareId : function() { - return this.props.brew.googleId ? + return this.props.brew.googleId && !this.props.brew.stubbed ? this.props.brew.googleId + this.props.brew.shareId : this.props.brew.shareId; }, diff --git a/server/app.js b/server/app.js index 5558de264..74c66508f 100644 --- a/server/app.js +++ b/server/app.js @@ -190,7 +190,7 @@ app.get('/user/:username', async (req, res, next)=>{ }); for (const brew of brews) { - const match = googleBrews.findIndex((b)=>b.editId === brew.editId); + const match = googleBrews?.findIndex((b)=>b.editId === brew.editId) ?? -1; if(match !== -1) { brew.googleId = googleBrews[match].googleId; brew.stubbed = true; diff --git a/server/homebrew.api.js b/server/homebrew.api.js index e6f304aa4..460127b1b 100644 --- a/server/homebrew.api.js +++ b/server/homebrew.api.js @@ -48,7 +48,7 @@ const getBrew = (accessType)=>{ // If we can't find the google brew and there is a google id for the brew, throw an error. if(!googleBrew) throw googleError; // Combine the Homebrewery stub with the google brew, or if the stub doesn't exist just use the google brew - stub = stub ? _.assign(excludeStubProps(stub), excludeGoogleProps(googleBrew)) : googleBrew; + stub = stub ? _.assign({ ...excludeStubProps(stub), stubbed: true }, excludeGoogleProps(googleBrew)) : googleBrew; } // If after all of that we still don't have a brew, throw an exception @@ -257,17 +257,22 @@ const deleteGoogleBrew = async (account, id, editId, res)=>{ }; const deleteBrew = async (req, res)=>{ - const { brew, account } = req; - if(brew.googleId) { - const googleDeleted = await deleteGoogleBrew(account, brew.googleId, brew.editId, res) + let brew = req.brew; + const { googleId, editId } = brew; + const account = req.account; + const isOwner = account && (brew.authors.length === 0 || brew.authors[0] === account.username); + console.log(brew.authors, googleId, account.username); + let afterSave = async ()=>true; + if(googleId && isOwner) { + afterSave = async ()=>await deleteGoogleBrew(account, googleId, editId, res) .catch((err)=>{ console.error(err); res.status(500).send(err); }); - if(!googleDeleted) return; } if(brew._id) { + brew = _.assign(await HomebrewModel.findOne({ _id: brew._id }), brew); if(account) { // Remove current user as author brew.authors = _.pull(brew.authors, account.username); @@ -282,6 +287,12 @@ const deleteBrew = async (req, res)=>{ throw { status: 500, message: 'Error while removing' }; }); } else { + if(googleId && isOwner) { + brew.googleId = undefined; + brew.textBin = zlib.deflateRawSync(brew.text); + brew.text = undefined; + } + // Otherwise, save the brew with updated author list await brew.save() .catch((err)=>{ @@ -289,6 +300,8 @@ const deleteBrew = async (req, res)=>{ }); } } + const after = await afterSave(); + if(!after) return; res.status(204).send(); };