From e6f0ee38aa3e448136da623a28e88d400314a73a Mon Sep 17 00:00:00 2001 From: Alexis <35.alexis.pele@gmail.com> Date: Fri, 3 Jul 2020 21:44:01 +0200 Subject: [PATCH] - Added add user methods (will need polish imo) --- database/auracle_db_create.sql | 4 --- repositories/user-repository.js | 62 +++++++++++++++++++++++++-------- routes/users.js | 7 ++-- 3 files changed, 51 insertions(+), 22 deletions(-) diff --git a/database/auracle_db_create.sql b/database/auracle_db_create.sql index 221d642..2f62e0c 100644 --- a/database/auracle_db_create.sql +++ b/database/auracle_db_create.sql @@ -128,10 +128,6 @@ INSERT INTO `role` (name, description) VALUES ("Arcanologue", "Maîtres de l'arcane, ils ont le pouvoir et la responsabilité de juger les sortilèges récents et de les supprimer, ou valider."), ("Augure", "Régents des grimoires, ils ont droit d'accès à l'intégralité des informations connues, et pouvoir absolu sur le savoir arcanique."); --- USERS -INSERT INTO `user` (uuid, name, mail, password, role_id) VALUES -("6af978f0-96ed-11e8-bb38-37f5ae311cf6", "Izàc Tymos", "tymos@ambrose.edu", "root", 4); - -- META SCHOOLS INSERT INTO `meta_school` (name, description) VALUES ('Magies blanches', 'Magies disciplinant les arts de soins et de lumières.'), diff --git a/repositories/user-repository.js b/repositories/user-repository.js index 3e44083..a93d034 100644 --- a/repositories/user-repository.js +++ b/repositories/user-repository.js @@ -33,13 +33,12 @@ class UserRepository { resolve(v.toJSON({ omitPivot: true })) }) .catch(err => { - console.log(err) reject(new HttpError(500, "Couldn't get users")) }) }) } - getOneFromUUID(uuid) { + getOneByUUID(uuid) { return new Promise((resolve, reject) => { model.forge() .where({ 'uuid' : uuid }) @@ -48,12 +47,37 @@ class UserRepository { resolve(v.toJSON({ omitPivot: true })) }) .catch(err => { - console.log(err) reject(new HttpError(500, "Couldn't get user")) }) }) } + getOneByEmail(mail) { + return new Promise((resolve, reject) => { + model.forge() + .where({ 'mail': mail}) + .fetch() + .then(v => { + resolve(v.toJSON({ omitPivot: true })) + }) + .catch(err => { + reject(new HttpError(500, "Couldn't get user")) + }) + }) + } + + checkIfEmailAvailable(mail) { + return new Promise((resolve, reject) => { + this.getOneByEmail(mail) + .then(() => { + reject(false) + }) + .catch(() => { + resolve(true) + }) + }) + } + addOne(u) { return new Promise(async (resolve, reject) => { // Checks if body exists and if the model fits, and throws errors if it doesn't @@ -67,22 +91,32 @@ class UserRepository { let hash = await bcrypt.hash(u.password, 10) let uuid = uuidv4() - // Needs to account for duplicate emails - bookshelf.transaction(t => { - return model.forge({ - 'uuid': uuid, - 'name': u.name, - 'mail': u.mail, - 'password': hash, + this.checkIfEmailAvailable(u.mail) + .then(() => { + bookshelf.transaction(t => { + return model.forge({ + 'uuid': uuid, + 'name': u.name, + 'mail': u.mail, + 'password': hash, + }) + .save(null, { + transacting: t + }) + .catch(err => { + console.log(err) + }) }) - .save(null, { - transacting: t + .then(v => { + resolve(this.getOneByUUID(uuid)) }) .catch(err => { - console.log(err) + throw err }) }) - + .catch(() => { + reject(new HttpError(403, 'Email is already in use !')) + }) } }) } diff --git a/routes/users.js b/routes/users.js index 427d801..c6af63d 100644 --- a/routes/users.js +++ b/routes/users.js @@ -39,15 +39,15 @@ router.get('/', async (req, res) => { // GET ONE FORM UUID ------------------ -const getUserFromUUID = (uuid) => { - return Users.getOneFromUUID(uuid) +const getUserByUUID = (uuid) => { + return Users.getOneByUUID(uuid) .catch(err => { console.log(err) throw err }) } router.get('/:uuid/', async (req, res) => { - getUserFromUUID(req.params.uuid) + getUserByUUID(req.params.uuid) .then(v => { res.setHeader('Content-Type', 'application/json;charset=utf-8') res.end(JSON.stringify(v)) @@ -67,7 +67,6 @@ router.get('/:uuid/', async (req, res) => { const addUser = (u) => { return Users.addOne(u) .catch(err => { - console.log(err) throw err }) }