initial commit - code moved to separate repo
This commit is contained in:
93
pages/api/upload.ts
Normal file
93
pages/api/upload.ts
Normal file
@ -0,0 +1,93 @@
|
||||
import type { NextApiRequest, NextApiResponse } from 'next';
|
||||
import { createRouter, expressWrapper } from "next-connect";
|
||||
import multer from 'multer';
|
||||
import excel from "../../src/helpers/excel";
|
||||
import common from "../../src/helpers/common";
|
||||
|
||||
const upload = multer({
|
||||
storage: multer.memoryStorage(),
|
||||
});
|
||||
const progressStore = {};
|
||||
|
||||
// Update the progressStore instead of the session
|
||||
function updateProgress(fileId, progress) {
|
||||
progressStore[fileId] = progress;
|
||||
};
|
||||
|
||||
function getProgress(fileId) {
|
||||
return progressStore[fileId] || 0;
|
||||
};
|
||||
|
||||
|
||||
const router = createRouter<NextApiRequest, NextApiResponse>();
|
||||
|
||||
router.use(expressWrapper(upload.single('file')))
|
||||
.post(async (req, res) => {
|
||||
try {
|
||||
if (!req.file) {
|
||||
return res.status(400).json({ message: 'No file uploaded' });
|
||||
}
|
||||
|
||||
// Extract the action and date from query parameters
|
||||
const { action, date } = req.query;
|
||||
// Generate a unique upload ID
|
||||
const fileId = new Date().getTime().toString();
|
||||
// Initialize progress
|
||||
updateProgress(fileId, 1);
|
||||
|
||||
if (action === 'readword') {
|
||||
// Start file processing asynchronously
|
||||
processWordFile(req.file.buffer, date, fileId, true)
|
||||
.catch(error => {
|
||||
// Handle any errors here
|
||||
updateProgress(fileId, 0);
|
||||
console.error('Грешка при обработката на файла:', error);
|
||||
});
|
||||
|
||||
// Respond immediately
|
||||
res.status(200).json({ message: 'Файла е качен. Започна обработката на данните.', fileId });
|
||||
|
||||
} else {
|
||||
// Handle other actions or return an error
|
||||
res.status(400).json({ message: 'Невалидно или неоточнено действие.' });
|
||||
}
|
||||
} catch (error) {
|
||||
// Error handling
|
||||
res.status(500).json({ message: 'Вътрешна грешка на сървъра', error: error.message });
|
||||
}
|
||||
})
|
||||
.get((req, res) => {
|
||||
console.log('Progress check handler');
|
||||
const { fileId } = req.query;
|
||||
var progress = getProgress(fileId);
|
||||
res.status(200).json({ progress });
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
// Asynchronous file processing function
|
||||
async function processWordFile(fileBuffer, dateString, fileId, createAvailabilities) {
|
||||
const [year, month, day] = dateString.split('-');
|
||||
await excel.ReadDocxFileForMonth(null, fileBuffer, month, year, (currentProgress) => {
|
||||
updateProgress(fileId, currentProgress);
|
||||
}, createAvailabilities);
|
||||
}
|
||||
|
||||
// // Progress check handler - moved to server.js
|
||||
// router.get('/progress/:id', (req, res) => {
|
||||
// const { fileId } = req.query;
|
||||
// var progress = getProgress(fileId);
|
||||
// res.status(200).json({ progress });
|
||||
// });
|
||||
|
||||
const handler = (req: NextApiRequest, res: NextApiResponse) => {
|
||||
router.run(req, res);
|
||||
};
|
||||
|
||||
export default handler;
|
||||
|
||||
export const config = {
|
||||
api: {
|
||||
bodyParser: false, // Necessary for file upload
|
||||
},
|
||||
};
|
Reference in New Issue
Block a user