-
Notifications
You must be signed in to change notification settings - Fork 15
/
Copy pathmessMenu.resource.js
111 lines (98 loc) · 5.39 KB
/
messMenu.resource.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
const messMenu = require("../../models/messMenuModel");
const verifyRoles = require("../utils");
const roles = require("../roles");
const multer = require('multer'); // For file uploads
const fs = require('fs');
const csvParser = require('csv-parser');
let allowedRoles = [roles.SUPERADMIN, roles.MESS];
// Set up multer for file uploads
const upload = multer({ dest: 'uploads/' });
module.exports = {
resource: messMenu,
options: {
listProperties: ["hostel", "monday","tuesday","wednesday","thursday","friday","saturday","sunday"],
filterProperties: ["hostel", "monday","tuesday","wednesday","thursday","friday","saturday","sunday"],
editProperties: ["hostel", "monday","tuesday","wednesday","thursday","friday","saturday","sunday"],
showProperties: ["hostel", "monday","tuesday","wednesday","thursday","friday","saturday","sunday"],
actions: {
list: { isAccessible: ({ currentAdmin }) => verifyRoles(currentAdmin, allowedRoles) },
new: { isAccessible: ({ currentAdmin }) => verifyRoles(currentAdmin, allowedRoles) },
filter: { isAccessible: ({ currentAdmin }) => verifyRoles(currentAdmin, allowedRoles) },
edit: { isAccessible: ({ currentAdmin }) => verifyRoles(currentAdmin, allowedRoles) },
delete: { isAccessible: ({ currentAdmin }) => verifyRoles(currentAdmin, allowedRoles) },
uploadCSV: {
actionType: 'resource',
icon: 'Document',
isAccessible: ({ currentAdmin }) => verifyRoles(currentAdmin, allowedRoles),
handler: async (request, response, context) => {
if (request.method === 'post') {
const file = request.payload.file;
const results = [];
fs.createReadStream(file.path)
.pipe(csvParser())
.on('data', (data) => results.push(data))
.on('end', async () => {
try {
const hostelData = {};
results.forEach((row) => {
const { hostel, day, meal, mealDescription, startTiming, endTiming } = row;
if (!hostelData[hostel]) {
hostelData[hostel] = {};
}
if (!hostelData[hostel][day]) {
hostelData[hostel][day] = { breakfast: null, lunch: null, dinner: null };
}
const mealData = {
mealDescription,
startTiming: new Date(startTiming),
endTiming: new Date(endTiming),
};
hostelData[hostel][day][meal] = mealData;
});
for (const hostel in hostelData) {
const menu = hostelData[hostel];
await messMenu.findOneAndUpdate(
{ hostel },
{
hostel,
monday: menu.monday,
tuesday: menu.tuesday,
wednesday: menu.wednesday,
thursday: menu.thursday,
friday: menu.friday,
saturday: menu.saturday,
sunday: menu.sunday,
},
{ upsert: true, new: true }
);
}
fs.unlinkSync(file.path);
return {
notice: {
message: 'CSV uploaded and menu updated successfully!',
type: 'success',
},
};
} catch (error) {
console.error(error);
return {
notice: {
message: 'Error processing CSV file!',
type: 'error',
},
};
}
});
}
return {
notice: {
message: 'Upload CSV file to update mess menu.',
type: 'info',
},
};
},
component: AdminJS.bundle('../../components/upload-csv'),
}
}
}
};