mirror of
https://github.com/AmruthPillai/Reactive-Resume.git
synced 2026-07-25 01:15:26 +10:00
Updated "deleteUser" Firebase cloud function to perform updates in an atomic way, tweaked UI call and error handling
This commit is contained in:
+8
-4
@@ -19,8 +19,9 @@ const deleteUserFunctionHandler = async (_, { auth }) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// 1. Delete user resumes
|
|
||||||
const userId = auth.uid;
|
const userId = auth.uid;
|
||||||
|
const updates = {};
|
||||||
|
|
||||||
const userResumesDataSnapshot = await admin
|
const userResumesDataSnapshot = await admin
|
||||||
.database()
|
.database()
|
||||||
.ref('resumes')
|
.ref('resumes')
|
||||||
@@ -30,18 +31,21 @@ const deleteUserFunctionHandler = async (_, { auth }) => {
|
|||||||
const userResumes = userResumesDataSnapshot.val();
|
const userResumes = userResumesDataSnapshot.val();
|
||||||
if (userResumes) {
|
if (userResumes) {
|
||||||
Object.keys(userResumes).forEach(async (resumeId) => {
|
Object.keys(userResumes).forEach(async (resumeId) => {
|
||||||
await admin.database().ref(`resumes/${resumeId}`).remove();
|
updates[`resumes/${resumeId}`] = null;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2. Delete user
|
|
||||||
const userDataSnapshot = await admin
|
const userDataSnapshot = await admin
|
||||||
.database()
|
.database()
|
||||||
.ref(`users/${userId}`)
|
.ref(`users/${userId}`)
|
||||||
.once('value');
|
.once('value');
|
||||||
const user = userDataSnapshot.val();
|
const user = userDataSnapshot.val();
|
||||||
if (user) {
|
if (user) {
|
||||||
await admin.database().ref(`users/${userId}`).remove();
|
updates[`users/${userId}`] = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Object.keys(updates).length > 0) {
|
||||||
|
await admin.database().ref().update(updates);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ const Settings = ({ id }) => {
|
|||||||
dispatch({ type: 'change_language', payload: lang });
|
dispatch({ type: 'change_language', payload: lang });
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleDeleteAccount = () => {
|
const handleDeleteAccount = async () => {
|
||||||
if (deleteText === t('builder.settings.dangerZone.button')) {
|
if (deleteText === t('builder.settings.dangerZone.button')) {
|
||||||
setDeleteText(t('shared.buttons.confirmation'));
|
setDeleteText(t('shared.buttons.confirmation'));
|
||||||
return;
|
return;
|
||||||
@@ -43,18 +43,12 @@ const Settings = ({ id }) => {
|
|||||||
|
|
||||||
setDeleteText(t('shared.buttons.loading'));
|
setDeleteText(t('shared.buttons.loading'));
|
||||||
|
|
||||||
setTimeout(
|
try {
|
||||||
() =>
|
await deleteAccount();
|
||||||
deleteAccount()
|
} catch (error) {
|
||||||
.then(() => {
|
toast.error('An error occurred deleting your account');
|
||||||
setDeleteText('Buh bye! :(');
|
setDeleteText(t('builder.settings.dangerZone.button'));
|
||||||
})
|
}
|
||||||
.catch((error) => {
|
|
||||||
toast.error(error.message);
|
|
||||||
setDeleteText(t('builder.settings.dangerZone.button'));
|
|
||||||
}),
|
|
||||||
500,
|
|
||||||
);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
Reference in New Issue
Block a user