const express = require('express'); const router = express.Router(); const defineStep = require('../../models/steps'); const defineCaseStep = require('../../models/caseSteps'); const { DataTypes, Op } = require('sequelize'); module.exports = function (sequelize) { const Step = defineStep(sequelize, DataTypes); const CaseStep = defineCaseStep(sequelize, DataTypes); const { verifySignedIn } = require('../../middleware/auth')(sequelize); const { verifyProjectDeveloperFromCaseId } = require('../../middleware/verifyEditable')(sequelize); router.delete('/:stepId', verifySignedIn, verifyProjectDeveloperFromCaseId, async (req, res) => { const stepId = req.params.stepId; const caseId = req.query.caseId; const t = await sequelize.transaction(); try { const step = await Step.findByPk(stepId); if (!step) { await t.rollback(); return res.status(404).send('Step not found'); } // Get caseStep to be deleted. const deletingCaseStep = await CaseStep.findOne({ where: { StepId: stepId, }, transaction: t, }); // Decrease stepNo for all caseSteps with greater than the caseStep to be deleted. await CaseStep.update( { stepNo: sequelize.literal('stepNo - 1') }, { where: { CaseId: caseId, stepNo: { [Op.gt]: deletingCaseStep.stepNo, }, }, transaction: t, } ); await step.destroy({ transaction: t }); await t.commit(); res.status(204).send(); } catch (error) { console.error(error); await t.rollback(); res.status(500).send('Internal Server Error'); } }); return router; };