add deleteUserBrews api method

This commit is contained in:
Víctor Losada Hernández
2026-09-12 15:18:48 +02:00
parent b2224c1a48
commit 7a0743a1e9
2 changed files with 64 additions and 17 deletions
+20 -16
View File
@@ -384,27 +384,31 @@ export default async function createApp(vite) {
app.delete('/api/user/delete', async (req, res)=>{
const { username } = req.body;
const ownAccount = req.account && (req.account.username == username);
if(!ownAccount) return res.status(403).json({ error: 'Must be logged in to delete your account' });
if(!req.account || req.account.username !== username) {
return res.status(403).json({error : 'Must be logged in to delete your account'});
}
try {
const brews = await HomebrewModel.getByUser(username, true, ['_id', 'googleId', 'editId', 'authors']);
const result = await api.deleteUserBrews(username, req.account);
const deletePromises = brews.map((brew)=>{
req.brew = brew;
return new Promise((resolve, reject)=>{
api.deleteBrew(req, res, (err)=>err ? reject(err) : resolve());
if(!result.success) {
return res.status(500).json({
error : 'Failed to delete brew.',
brewId : result.brewId,
googleId : result.googleId
});
});
await Promise.all(deletePromises);
return res.json({ success: true, message: `All brews for ${username} have been deleted.` });
} catch (error) {
console.error('Error deleting brews:', error);
if(!res.headersSent) {
return res.status(500).json({ error: 'Failed to delete the brews.' });
}
return res.json({
success : true,
message : `All brews for ${username} have been processed.`
});
} catch (error) {
console.error('Error deleting user brews:', error);
return res.status(500).json({
error : 'Failed to process user brews.'
});
}
});
+44 -1
View File
@@ -568,7 +568,50 @@ const api = {
}
res.status(204).send();
}
},
deleteUserBrews : async (username, account)=>{
const brews = await HomebrewModel.getByUser(
username,
true,
['_id', 'googleId', 'editId', 'shareId', 'authors']
);
for (const brew of brews) {
const isOwner = brew.authors[0] === username;
try {
if(brew.googleId && isOwner) {
await api.deleteGoogleBrew(
account,
brew.googleId,
brew.editId
);
}
// Remove the user from the authors array.
brew.authors = _.pull(brew.authors, username);
if(brew.authors.length === 0) {
await HomebrewModel.deleteOne({ _id: brew._id });
} else {
brew.markModified('authors');
await brew.save();
}
} catch (error) {
console.error(`Failed to delete${googleId ? ' google' : ''} brew with shareId ${brew.shareId}:`, error);
return {
success : false,
brewId : brew.shareId,
googleId : brew.googleId || null
};
}
}
return {
success : true
};
},
};
router.use(dbCheck);