mirror of
https://github.com/naturalcrit/homebrewery.git
synced 2026-09-21 12:12:58 +00:00
add deleteUserBrews api method
This commit is contained in:
+20
-16
@@ -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
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user