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 }) }