79 lines
2.1 KiB
JavaScript
79 lines
2.1 KiB
JavaScript
import Employee from '../models/employee.model.js';
|
|
import { createReadStream } from 'fs';
|
|
import { parse } from 'fast-csv';
|
|
import { Parser as CsvParser } from 'json2csv';
|
|
|
|
const upload = async (req, res) => {
|
|
try {
|
|
if (req.file == undefined) {
|
|
return res.status(400).send("Please upload a CSV file!");
|
|
}
|
|
|
|
let employees = [];
|
|
let path = "./resources/static/assets/uploads/" + req.file.filename;
|
|
|
|
createReadStream(path)
|
|
.pipe(parse({ headers: true }))
|
|
.on("error", (error) => {
|
|
throw error.message;
|
|
})
|
|
.on("data", (row) => {
|
|
employees.push(row);
|
|
})
|
|
.on("end", () => {
|
|
Employee.bulkCreate(employees)
|
|
.then(() => {
|
|
res.status(200).send({
|
|
message: "The file: "
|
|
+ req.file.originalname
|
|
+ " got uploaded successfully!!",
|
|
});
|
|
})
|
|
.catch((error) => {
|
|
res.status(500).send({
|
|
message: "Couldn't import data into database!",
|
|
error: error.message,
|
|
});
|
|
});
|
|
});
|
|
} catch (error) {
|
|
console.log(error);
|
|
res.status(500).send({
|
|
message: "Failed to upload the file: " + req.file.originalname,
|
|
});
|
|
}
|
|
};
|
|
|
|
const download = (_req, res) => {
|
|
Employee.findAll().then((objs) => {
|
|
let employees = [];
|
|
|
|
objs.forEach((obj) => {
|
|
const { id, name, email,
|
|
username, dob, company,
|
|
address, location, salary,
|
|
about, role } = obj;
|
|
employees.push({ id, name, email,
|
|
username, dob, company,
|
|
address, location, salary,
|
|
about, role });
|
|
});
|
|
|
|
const csvFields = ['id', 'name', 'email',
|
|
'username', 'dob', 'company',
|
|
'address', 'location', 'salary',
|
|
'about', 'role'];
|
|
const csvParser = new CsvParser({ csvFields });
|
|
const csvData = csvParser.parse(employees);
|
|
|
|
res.setHeader('Content-Type', 'text/csv');
|
|
res.setHeader('Content-Disposition', 'attachment; filename=employees.csv');
|
|
|
|
res.status(200).end(csvData);
|
|
});
|
|
};
|
|
|
|
export default {
|
|
upload,
|
|
download,
|
|
}; |