diff --git a/javascripts/mon-compte/index.js b/javascripts/mon-compte/index.js index a71a456..464c8b6 100644 --- a/javascripts/mon-compte/index.js +++ b/javascripts/mon-compte/index.js @@ -22,8 +22,10 @@ if (typeof email !== "undefined" && typeof username !== "undefined") { wantlist: "Je viens d'ajouter {artist} - {album} à ma liste de souhaits !", }, + delete: false, }, loading: false, + deleting: false, errors: [], }; }, @@ -108,6 +110,20 @@ if (typeof email !== "undefined" && typeof username !== "undefined") { return true; }, + async deleteAccount() { + try { + await axios.delete(`/api/v1/me`); + + showToastr("Compte supprimé", true); + + window.location.href = "/se-deconnecter"; + } catch (err) { + showToastr( + err.response?.data?.message || + "Impossible de mettre à jour votre profil" + ); + } + }, }, }).mount("#mon-compte"); } diff --git a/src/middleware/Me.js b/src/middleware/Me.js index a4175de..5a477cc 100644 --- a/src/middleware/Me.js +++ b/src/middleware/Me.js @@ -1,6 +1,8 @@ import Joi from "joi"; import UsersModel from "../models/users"; +import AlbumsModel from "../models/albums"; +import WantlistModel from "../models/wantlist"; import Pages from "./Pages"; /** @@ -69,6 +71,23 @@ class Me extends Pages { return user; } + + /** + * Méthode permettant de supprimer un utilisateur et toutes ses données + * + * @return {Object} + */ + async deleteMe() { + const { _id } = this.req.user; + + await AlbumsModel.deleteMany({ User: _id }); + await WantlistModel.deleteMany({ User: _id }); + await UsersModel.deleteOne({ _id }); + + return { + deleted: true, + }; + } } export default Me; diff --git a/src/routes/api/v1/me.js b/src/routes/api/v1/me.js index 42c46b9..d9e4da0 100644 --- a/src/routes/api/v1/me.js +++ b/src/routes/api/v1/me.js @@ -15,6 +15,16 @@ router const me = new Me(req); const data = await me.patchMe(); + return sendResponse(req, res, data); + } catch (err) { + return next(err); + } + }) + .delete(ensureLoggedIn("/connexion"), async (req, res, next) => { + try { + const me = new Me(req); + const data = await me.deleteMe(); + return sendResponse(req, res, data); } catch (err) { return next(err); diff --git a/views/pages/mon-compte/index.ejs b/views/pages/mon-compte/index.ejs index 5cc161d..52cf376 100644 --- a/views/pages/mon-compte/index.ejs +++ b/views/pages/mon-compte/index.ejs @@ -149,7 +149,39 @@ -
+
+

Supprimer mon compte

+
+

+ Vous souhaitez supprimer votre compte et vos collections ? +
+ Rien de plus simple ! +
+ Il vous suffit de cliquer sur le bouton ci-dessous et l'on se charge de supprimer dans la seconde absolument toutes les données stockées sur cette instance vous concernant ! +

+ +
+
+ Attention +
+
+ Toute suppression est définitive +
+
+ +
+ +
+ + +
+