From 098d4b48f47fc6dff3377bd9d5ec934cf0991eae Mon Sep 17 00:00:00 2001 From: elangptra Date: Wed, 4 Dec 2024 08:53:21 +0700 Subject: [PATCH] feat: send excel template and example --- controllers/usersControllers/user.js | 64 ++++++++++++++++++++++++ media/uploads/excel/excel example.xlsx | Bin 0 -> 8929 bytes media/uploads/excel/excel template.xlsx | Bin 4778 -> 8805 bytes routes/user/user.js | 6 ++- 4 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 media/uploads/excel/excel example.xlsx diff --git a/controllers/usersControllers/user.js b/controllers/usersControllers/user.js index 802ff9e..810c1e8 100644 --- a/controllers/usersControllers/user.js +++ b/controllers/usersControllers/user.js @@ -711,3 +711,67 @@ export const getMe = async (req, res) => { response(500, null, "Error retrieving user data!", res); } }; + +export const sendExcelTemplate = async (req, res) => { + try { + const filePath = path.join( + process.cwd(), + "media/uploads/excel/excel template.xlsx" + ); + + if (!fs.existsSync(filePath)) { + return res.status(404).json({ + success: false, + message: "File not found!", + }); + } + + const fileName = "excel_template.xlsx"; + + res.setHeader("Content-Disposition", `attachment; filename=${fileName}`); + res.setHeader( + "Content-Type", + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" + ); + + return res.sendFile(filePath); + } catch (error) { + console.error("Error sending file:", error); + return res.status(500).json({ + success: false, + message: "Internal Server Error", + }); + } +}; + +export const sendExcelExample = async (req, res) => { + try { + const filePath = path.join( + process.cwd(), + "media/uploads/excel/excel example.xlsx" + ); + + if (!fs.existsSync(filePath)) { + return res.status(404).json({ + success: false, + message: "File not found!", + }); + } + + const fileName = "excel_example.xlsx"; + + res.setHeader("Content-Disposition", `attachment; filename=${fileName}`); + res.setHeader( + "Content-Type", + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" + ); + + return res.sendFile(filePath); + } catch (error) { + console.error("Error sending file:", error); + return res.status(500).json({ + success: false, + message: "Internal Server Error", + }); + } +}; diff --git a/media/uploads/excel/excel example.xlsx b/media/uploads/excel/excel example.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..7ef54f226b568297cc2796b22ee870a62920ab9d GIT binary patch literal 8929 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 diff --git a/routes/user/user.js b/routes/user/user.js index ab95878..d2c3409 100644 --- a/routes/user/user.js +++ b/routes/user/user.js @@ -1,5 +1,5 @@ import express from "express"; -import { getUsers, getAdmins, getTeachers, getStudents, getUserById, getUserByName, updateUserById, updateUserPasswordById, deleteUserById, getMe } from "../../controllers/usersControllers/user.js"; +import { getUsers, getAdmins, getTeachers, getStudents, getUserById, getUserByName, updateUserById, updateUserPasswordById, deleteUserById, getMe, sendExcelTemplate, sendExcelExample } from "../../controllers/usersControllers/user.js"; import { verifyLoginUser, adminOnly, adminOrTeacherOnly } from "../../middlewares/User/authUser.js"; import handleUpload from "../../middlewares/User/uploadUser.js"; @@ -14,6 +14,10 @@ router.get("/user/teacher", verifyLoginUser, adminOrTeacherOnly, getTeachers); router.get("/user/student", verifyLoginUser, adminOrTeacherOnly, getStudents); +router.get("/user/sendExcelTemplate", verifyLoginUser, adminOrTeacherOnly, sendExcelTemplate); + +router.get("/user/sendExcelExample", verifyLoginUser, adminOrTeacherOnly, sendExcelExample); + router.get("/user/:id", verifyLoginUser, getUserById); router.get("/user/name/:name", verifyLoginUser, adminOrTeacherOnly, getUserByName);