From 3dbb95ab4dec1b3ff493dee818048be470a11a53 Mon Sep 17 00:00:00 2001 From: Alexis <35.alexis.pele@gmail.com> Date: Sat, 6 Jun 2020 17:07:03 +0200 Subject: [PATCH] finished the delete ORM method for spell --- repositories/spell-repository.js | 24 +++++++++ routes/spells.js | 87 +------------------------------- 2 files changed, 26 insertions(+), 85 deletions(-) diff --git a/repositories/spell-repository.js b/repositories/spell-repository.js index 0a5b2df..eb720d3 100644 --- a/repositories/spell-repository.js +++ b/repositories/spell-repository.js @@ -214,6 +214,30 @@ class SpellRepository { }) }) .catch(err => { + console.log(err) + reject(new HttpError(404, "Couldn't get spell")) + }) + }) + } + + deleteOne(id) { + return new Promise((resolve, reject) => { + this._model.forge() + .where({ 'id' : id }) + .fetch({require: true, withRelated: ['schools.meta_schools', 'variables', 'ingredients']}) + .then(v => { + v.schools().detach(); + v.variables().detach(); + v.ingredients().detach(); + v.destroy(); + }) + .then(() => { + resolve({ + 'message': 'Spell with ID ' + id + ' successfully deleted !' + }) + }) + .catch(err => { + console.log(err) reject(new HttpError(404, "Couldn't get spell")) }) }) diff --git a/routes/spells.js b/routes/spells.js index e2aefde..d7ed52c 100644 --- a/routes/spells.js +++ b/routes/spells.js @@ -120,92 +120,9 @@ router.put('/:id/', async (req, res) => { // DELETE ONE ------------------ const deleteSpell = (id) => { - return new Promise(async (resolve, reject) => { - - // Check if spell exists - let old_spell = await getSpell(id) - .catch(() => { - reject((new HttpError(404, 'No spell matching this ID'))) - }) - - let deleteSchoolsData = () => { - return new Promise((resolve, reject) => { - let delete_schools_query = `DELETE FROM spells_schools WHERE id_spell = ${db.escape(id)}` - db.query(delete_schools_query, async (err, result) => { - if (err) { - reject(new HttpError(500, 'Spell schools deletion failed')) - } else { - console.log(`Deleted schools associated to spell ID ${db.escape(id)}`) - resolve() - } - }) - }) - } - - let deleteVariablesData = () => { - return new Promise((resolve, reject) => { - let delete_variables_query = `DELETE FROM spells_variables WHERE id_spell = ${db.escape(id)}` - db.query(delete_variables_query, async (err, result) => { - if (err) { - console.log(err) - reject(new HttpError(500, 'Spell variables deletion failed')) - } else { - console.log(`Deleted variables associated to spell ID ${db.escape(id)}`) - resolve() - } - }) - }) - } - - let deleteIngredientsData = () => { - return new Promise((resolve, reject) => { - let delete_ingredients_query = `DELETE FROM spells_ingredients WHERE id_spell = ${db.escape(id)}` - db.query(delete_ingredients_query, async (err, result) => { - if (err) { - console.log(err) - reject(new HttpError(500, 'Spell ingredients deletion failed')) - } else { - console.log(`Deleted ingredients associated to spell ID ${db.escape(id)}`) - resolve() - } - }) - }) - } - - let deleteSpellData = () => { - return new Promise((resolve, reject) => { - let delete_spell_query = `DELETE FROM spell WHERE id = ${db.escape(id)}` - db.query(delete_spell_query, async (err, result) => { - if (err) { - console.log(err) - reject(new HttpError(500, 'Spell deletion failed')) - } else { - console.log(`Deleted spell ID ${db.escape(id)}, affecting ${result.affectedRows} rows`) - resolve() - } - }) - }) - } - - const promises = [ - deleteSchoolsData(), - deleteVariablesData(), - deleteIngredientsData() - ] - - Promise.all(promises) - .then(() => { - deleteSpellData() - let response = { - message: `Spell ID ${id} was successfully deleted.` - } - resolve(response) - }) - .catch(err => { - reject(err) - }) - }) + return Spells.deleteOne(id) .catch(err => { + console.log(err) throw err }) }