update runCase at once
This commit is contained in:
@@ -22,6 +22,7 @@ app.use(express.static(path.join(__dirname, 'public')));
|
||||
const sequelize = new Sequelize({
|
||||
dialect: 'sqlite',
|
||||
storage: 'database/database.sqlite',
|
||||
logging: false,
|
||||
});
|
||||
|
||||
// "/"
|
||||
@@ -98,17 +99,9 @@ app.use('/runs', runDeleteRoute);
|
||||
|
||||
// "/runcases"
|
||||
const runCaseIndexRoute = require('./routes/runcases/index')(sequelize);
|
||||
const runCaseNewRoute = require('./routes/runcases/new')(sequelize);
|
||||
const runCaseEditRoute = require('./routes/runcases/edit')(sequelize);
|
||||
const runCaseBuldNewRoute = require('./routes/runcases/bulkNew')(sequelize);
|
||||
const runCaseDeleteRoute = require('./routes/runcases/delete')(sequelize);
|
||||
const runCaseBulkDeleteRoute = require('./routes/runcases/bulkDelete')(sequelize);
|
||||
app.use('/runcases', runCaseIndexRoute);
|
||||
app.use('/runcases', runCaseNewRoute);
|
||||
app.use('/runcases', runCaseEditRoute);
|
||||
app.use('/runcases', runCaseBuldNewRoute);
|
||||
app.use('/runcases', runCaseDeleteRoute);
|
||||
app.use('/runcases', runCaseBulkDeleteRoute);
|
||||
|
||||
// "/members"
|
||||
const membersIndexRoute = require('./routes/members/index')(sequelize);
|
||||
|
||||
@@ -1,47 +0,0 @@
|
||||
const express = require('express');
|
||||
const router = express.Router();
|
||||
const defineRunCase = require('../../models/runCases');
|
||||
const { DataTypes, Op } = require('sequelize');
|
||||
|
||||
module.exports = function (sequelize) {
|
||||
const RunCase = defineRunCase(sequelize, DataTypes);
|
||||
const { verifySignedIn } = require('../../middleware/auth')(sequelize);
|
||||
const { verifyProjectReporterFromRunId } = require('../../middleware/verifyEditable')(sequelize);
|
||||
|
||||
router.post('/bulkdelete', verifySignedIn, verifyProjectReporterFromRunId, async (req, res) => {
|
||||
const recordsToDelete = req.body;
|
||||
|
||||
// TODO Instead of receiving a combination of runId and caseId from frontend,
|
||||
// receives only an array of caseId and constructs a pair from the query parameter runId
|
||||
try {
|
||||
const existingRunCases = await RunCase.findAll({
|
||||
where: {
|
||||
[Op.or]: recordsToDelete.map((condition) => ({
|
||||
runId: condition.runId,
|
||||
caseId: condition.caseId,
|
||||
})),
|
||||
},
|
||||
});
|
||||
|
||||
if (existingRunCases.length === 0) {
|
||||
return res.status(200).send('No records found to delete');
|
||||
}
|
||||
|
||||
await RunCase.destroy({
|
||||
where: {
|
||||
[Op.or]: recordsToDelete.map((condition) => ({
|
||||
runId: condition.runId,
|
||||
caseId: condition.caseId,
|
||||
})),
|
||||
},
|
||||
});
|
||||
|
||||
res.status(200).send('Records deleted successfully');
|
||||
} catch (error) {
|
||||
console.error('Error deleting run cases:', error);
|
||||
res.status(500).send('Internal Server Error');
|
||||
}
|
||||
});
|
||||
|
||||
return router;
|
||||
};
|
||||
@@ -1,49 +0,0 @@
|
||||
const express = require('express');
|
||||
const router = express.Router();
|
||||
const defineRunCase = require('../../models/runCases');
|
||||
const { DataTypes, Op } = require('sequelize');
|
||||
|
||||
module.exports = function (sequelize) {
|
||||
const { verifySignedIn } = require('../../middleware/auth')(sequelize);
|
||||
const { verifyProjectReporterFromRunId } = require('../../middleware/verifyEditable')(sequelize);
|
||||
const RunCase = defineRunCase(sequelize, DataTypes);
|
||||
|
||||
router.post('/bulknew', verifySignedIn, verifyProjectReporterFromRunId, async (req, res) => {
|
||||
const recordsToCreate = req.body;
|
||||
|
||||
// TODO Instead of receiving a combination of runId and caseId from frontend,
|
||||
// receives only an array of caseId and constructs a pair from the query parameter runId
|
||||
try {
|
||||
const existingRunCases = await RunCase.findAll({
|
||||
where: {
|
||||
[Op.or]: recordsToCreate.map((record) => ({
|
||||
runId: record.runId,
|
||||
caseId: record.caseId,
|
||||
})),
|
||||
},
|
||||
});
|
||||
|
||||
// Filter out records that already exist
|
||||
const recordsToCreateFiltered = recordsToCreate.filter((record) => {
|
||||
return !existingRunCases.some(
|
||||
(existingRecord) => existingRecord.runId == record.runId && existingRecord.caseId == record.caseId
|
||||
);
|
||||
});
|
||||
|
||||
const newRunCases = await RunCase.bulkCreate(
|
||||
recordsToCreateFiltered.map((record) => ({
|
||||
runId: record.runId,
|
||||
caseId: record.caseId,
|
||||
status: 0,
|
||||
}))
|
||||
);
|
||||
|
||||
res.json(newRunCases);
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
res.status(500).send('Internal Server Error');
|
||||
}
|
||||
});
|
||||
|
||||
return router;
|
||||
};
|
||||
@@ -1,37 +0,0 @@
|
||||
const express = require('express');
|
||||
const router = express.Router();
|
||||
const defineRunCase = require('../../models/runCases');
|
||||
const { DataTypes } = require('sequelize');
|
||||
|
||||
module.exports = function (sequelize) {
|
||||
const { verifySignedIn } = require('../../middleware/auth')(sequelize);
|
||||
const { verifyProjectReporterFromRunId } = require('../../middleware/verifyEditable')(sequelize);
|
||||
const RunCase = defineRunCase(sequelize, DataTypes);
|
||||
|
||||
router.delete('/', verifySignedIn, verifyProjectReporterFromRunId, async (req, res) => {
|
||||
const runId = req.query.runId;
|
||||
const caseId = req.query.caseId;
|
||||
|
||||
try {
|
||||
// Get RunCase to be deleted.
|
||||
const deletingRunCase = await RunCase.findOne({
|
||||
where: {
|
||||
runId: runId,
|
||||
caseId: caseId,
|
||||
},
|
||||
});
|
||||
|
||||
if (!deletingRunCase) {
|
||||
return res.status(404).send('RunCase not found');
|
||||
}
|
||||
|
||||
await deletingRunCase.destroy();
|
||||
res.status(204).send();
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
res.status(500).send('Internal Server Error');
|
||||
}
|
||||
});
|
||||
|
||||
return router;
|
||||
};
|
||||
@@ -8,31 +8,68 @@ module.exports = function (sequelize) {
|
||||
const { verifyProjectReporterFromRunId } = require('../../middleware/verifyEditable')(sequelize);
|
||||
const RunCase = defineRunCase(sequelize, DataTypes);
|
||||
|
||||
router.put('/', verifySignedIn, verifyProjectReporterFromRunId, async (req, res) => {
|
||||
router.post('/update', verifySignedIn, verifyProjectReporterFromRunId, async (req, res) => {
|
||||
const runId = req.query.runId;
|
||||
const caseId = req.query.caseId;
|
||||
const status = req.query.status;
|
||||
const runCases = req.body;
|
||||
const t = await sequelize.transaction();
|
||||
|
||||
console.log('############## start edit');
|
||||
console.log(runCases);
|
||||
console.log('############## end edit');
|
||||
|
||||
const createRunCase = async (runCase) => {
|
||||
const newRunCase = await RunCase.create(
|
||||
{
|
||||
runId: runId,
|
||||
caseId: runCase.caseId,
|
||||
status: 0,
|
||||
},
|
||||
{ transaction: t }
|
||||
);
|
||||
return newRunCase;
|
||||
};
|
||||
|
||||
const deleteRunCase = async (runCase) => {
|
||||
await RunCase.destroy({
|
||||
where: { runId: runId, caseId: runCase.caseId },
|
||||
transaction: t,
|
||||
});
|
||||
return null;
|
||||
};
|
||||
|
||||
const updateRunCase = async (runCase) => {
|
||||
await RunCase.update(
|
||||
{
|
||||
status: runCase.status,
|
||||
},
|
||||
{
|
||||
where: { id: runCase.id },
|
||||
transaction: t,
|
||||
}
|
||||
);
|
||||
return step;
|
||||
};
|
||||
|
||||
try {
|
||||
const runCase = await RunCase.findOne({
|
||||
where: {
|
||||
runId: runId,
|
||||
caseId: caseId,
|
||||
},
|
||||
});
|
||||
const results = await Promise.all(
|
||||
runCases.map(async (step) => {
|
||||
if (step.editState === 'new') {
|
||||
return createRunCase(step);
|
||||
} else if (step.editState === 'deleted') {
|
||||
return deleteRunCase(step);
|
||||
} else if (step.editState === 'changed') {
|
||||
return updateRunCase(step);
|
||||
} else if (step.editState === 'notChanged') {
|
||||
return step;
|
||||
}
|
||||
})
|
||||
);
|
||||
|
||||
if (!runCase) {
|
||||
return res.status(404).send('Runcase not found');
|
||||
}
|
||||
|
||||
await runCase.update({
|
||||
runId,
|
||||
caseId,
|
||||
status,
|
||||
});
|
||||
res.json(runCase);
|
||||
await t.commit();
|
||||
res.json(results.filter((result) => result !== null));
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
await t.rollback();
|
||||
res.status(500).send('Internal Server Error');
|
||||
}
|
||||
});
|
||||
|
||||
@@ -1,42 +0,0 @@
|
||||
const express = require('express');
|
||||
const router = express.Router();
|
||||
const defineRunCase = require('../../models/runCases');
|
||||
const { DataTypes } = require('sequelize');
|
||||
|
||||
module.exports = function (sequelize) {
|
||||
const { verifySignedIn } = require('../../middleware/auth')(sequelize);
|
||||
const { verifyProjectReporterFromRunId } = require('../../middleware/verifyEditable')(sequelize);
|
||||
const RunCase = defineRunCase(sequelize, DataTypes);
|
||||
|
||||
router.post('/', verifySignedIn, verifyProjectReporterFromRunId, async (req, res) => {
|
||||
const runId = req.query.runId;
|
||||
const caseId = req.query.caseId;
|
||||
|
||||
try {
|
||||
// Check if the record already exists
|
||||
const existingRunCase = await RunCase.findOne({
|
||||
where: {
|
||||
runId: runId,
|
||||
caseId: caseId,
|
||||
},
|
||||
});
|
||||
|
||||
if (existingRunCase) {
|
||||
return res.status(400).send('Record already exists');
|
||||
}
|
||||
|
||||
const newRunCase = await RunCase.create({
|
||||
runId: runId,
|
||||
caseId: caseId,
|
||||
status: 0,
|
||||
});
|
||||
|
||||
res.json(newRunCase);
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
res.status(500).send('Internal Server Error');
|
||||
}
|
||||
});
|
||||
|
||||
return router;
|
||||
};
|
||||
Reference in New Issue
Block a user