mirror of
https://github.com/ClaytonWWilson/CS307-Team24.git
synced 2025-12-16 10:18:48 +00:00
Delete removes all data now
This commit is contained in:
parent
56323801aa
commit
e8e69cec31
@ -70,12 +70,14 @@ exports.signup = (req, res) => {
|
|||||||
})
|
})
|
||||||
.then((idToken) => {
|
.then((idToken) => {
|
||||||
token = idToken;
|
token = idToken;
|
||||||
|
const defaultImageUrl = `https://firebasestorage.googleapis.com/v0/b/${config.storageBucket}/o/no-img.png?alt=media`;
|
||||||
const userCred = {
|
const userCred = {
|
||||||
email: newUser.email,
|
email: newUser.email,
|
||||||
handle: newUser.handle,
|
handle: newUser.handle,
|
||||||
createdAt: newUser.createdAt,
|
createdAt: newUser.createdAt,
|
||||||
userId,
|
userId,
|
||||||
followedTopics: []
|
followedTopics: [],
|
||||||
|
imageUrl: defaultImageUrl
|
||||||
};
|
};
|
||||||
return db.doc(`/users/${newUser.handle}`).set(userCred);
|
return db.doc(`/users/${newUser.handle}`).set(userCred);
|
||||||
})
|
})
|
||||||
@ -179,57 +181,76 @@ exports.login = (req, res) => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
//Deletes user account
|
//Deletes user account and all associated data
|
||||||
exports.deleteUser = (req, res) => {
|
exports.deleteUser = (req, res) => {
|
||||||
var currentUser;
|
// Get the profile image filename
|
||||||
firebase.auth().onAuthStateChanged(function(user) {
|
// `https://firebasestorage.googleapis.com/v0/b/${config.storageBucket}/o/${imageFileName}?alt=media`
|
||||||
currentUser = user;
|
const imageFileName = req.userData.imageUrl.split('/o/')[1].split('?alt=')[0];
|
||||||
if (currentUser) {
|
const userId = req.userData.userId;
|
||||||
var post_query = db.collection("posts").where("userHandle", "==", req.user.handle);
|
let errors = {};
|
||||||
post_query.get()
|
|
||||||
.then(function(myPosts) {
|
|
||||||
myPosts.forEach(function(doc) {
|
|
||||||
doc.ref.delete();
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
})
|
|
||||||
.then(function() {
|
|
||||||
res.status(200).send("Successfully removed all user's posts from database.");
|
|
||||||
return;
|
|
||||||
})
|
|
||||||
.catch(function(err) {
|
|
||||||
res.status(500).send("Failed to remove all user's posts from database.", err);
|
|
||||||
});
|
|
||||||
|
|
||||||
|
function thenFunction(data) {
|
||||||
|
console.log(`${data} data for ${req.userData.handle} has been deleted.`);
|
||||||
db.collection("users").doc(`${req.user.handle}`).delete()
|
|
||||||
.then(function() {
|
|
||||||
res.status(200).send("Sucessfully removed user from database.");
|
|
||||||
return;
|
|
||||||
})
|
|
||||||
.catch(function(err) {
|
|
||||||
res.status(500).send("Failed to remove user from database.", err);
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
currentUser.delete()
|
|
||||||
.then(function() {
|
|
||||||
console.log("Successfully deleted user.");
|
|
||||||
res.status(200).send("Sucessfully deleted user.");
|
|
||||||
return;
|
|
||||||
})
|
|
||||||
.catch(function(err) {
|
|
||||||
console.log("Failed to delete user.", err);
|
|
||||||
res.status(500).send("Failed to delete user.");
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
console.log("Failed to deleter user or cannot get user.");
|
function catchFunction(data, err) {
|
||||||
res.status(500).send("Failed to deleter user or cannot get user.");
|
console.error(err);
|
||||||
|
error[data] = err;
|
||||||
}
|
}
|
||||||
});
|
|
||||||
|
// Deletes user from authentication
|
||||||
|
let auth = admin.auth().deleteUser(userId);
|
||||||
|
|
||||||
|
// Deletes database data
|
||||||
|
let data = db.collection("users").doc(`${req.user.handle}`).delete();
|
||||||
|
|
||||||
|
// Deletes any custom profile image
|
||||||
|
let image;
|
||||||
|
if (imageFileName !== 'no-img.png') {
|
||||||
|
image = admin.storage().bucket().file(imageFileName).delete()
|
||||||
|
} else {
|
||||||
|
image = Promise.resolve();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Deletes all users posts
|
||||||
|
let posts = db.collection("posts")
|
||||||
|
.where("userHandle", "==", req.user.handle)
|
||||||
|
.get()
|
||||||
|
.then((query) => {
|
||||||
|
query.forEach((snap) => {
|
||||||
|
snap.ref.delete();
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
let promises = [
|
||||||
|
auth
|
||||||
|
.then(thenFunction('auth'))
|
||||||
|
.catch((err) => catchFunction('auth', err)),
|
||||||
|
data
|
||||||
|
.then(thenFunction('data'))
|
||||||
|
.catch((err) => catchFunction('data', err)),
|
||||||
|
image
|
||||||
|
.then(thenFunction('image'))
|
||||||
|
.catch((err) => catchFunction('image', err)),
|
||||||
|
posts
|
||||||
|
.then(thenFunction('posts'))
|
||||||
|
.catch((err) => catchFunction('image', err))
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
|
// Wait for all promises to resolve
|
||||||
|
let waitPromise = Promise.all(promises);
|
||||||
|
|
||||||
|
waitPromise.then(() => {
|
||||||
|
if (Object.keys(errors) > 0) {
|
||||||
|
return res.status(500).json(errors);
|
||||||
|
} else {
|
||||||
|
return res.status(200).json({message: `All data for ${req.userData.handle} has been deleted.`});
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
return res.status(500).json({error: err});
|
||||||
|
})
|
||||||
};
|
};
|
||||||
|
|
||||||
// Returns all data in the database for the user who is currently signed in
|
// Returns all data in the database for the user who is currently signed in
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user