feat: download test cases csv (#219)

This commit is contained in:
kimatata
2025-05-06 10:05:37 +09:00
committed by GitHub
parent a05b39604a
commit c2ef8d4c7b
11 changed files with 120 additions and 7 deletions

View File

@@ -0,0 +1,48 @@
const express = require('express');
const router = express.Router();
const { DataTypes } = require('sequelize');
const Papa = require('papaparse');
const defineCase = require('../../models/cases');
module.exports = function (sequelize) {
const Case = defineCase(sequelize, DataTypes);
const { verifySignedIn } = require('../../middleware/auth')(sequelize);
const { verifyProjectVisibleFromFolderId } = require('../../middleware/verifyVisible')(sequelize);
router.get('/download', verifySignedIn, verifyProjectVisibleFromFolderId, async (req, res) => {
const { folderId, type } = req.query;
if (!folderId) {
return res.status(400).json({ error: 'folderId is required' });
}
if (!type) {
return res.status(400).json({ error: 'download type is required' });
}
try {
const cases = await Case.findAll({
where: { folderId },
raw: true,
});
if (cases.length === 0) {
return res.status(404).send('No cases found');
}
const csv = Papa.unparse(cases, {
quotes: true,
skipEmptyLines: true,
});
res.setHeader('Content-Type', 'text/csv; charset=utf-8');
res.setHeader('Content-Disposition', `attachment; filename=cases_folder_${folderId}.csv`);
res.send(csv);
} catch (error) {
console.error(error);
res.status(500).send('Internal Server Error');
}
});
return router;
};