29 lines
1.0 KiB
JavaScript
29 lines
1.0 KiB
JavaScript
// /components/dataImport/dataImportController.js
|
|
'use strict';
|
|
|
|
const catchAsync = require('../../utils/catchAsync');
|
|
const dataImportService = require('./dataImportService');
|
|
const AppError = require('../../utils/AppError');
|
|
const { successResponse } = require('../../utils/apiResponse');
|
|
|
|
exports.importJson = catchAsync(async (req, res) => {
|
|
let payload = req.body;
|
|
|
|
if (req.file?.buffer) {
|
|
try {
|
|
payload = JSON.parse(req.file.buffer.toString('utf8'));
|
|
} catch {
|
|
throw new AppError('VALIDATION_FAILED', null, 'Uploaded file is not valid JSON');
|
|
}
|
|
}
|
|
|
|
// Allow { data: { courses: [...] } } wrappers
|
|
if (payload?.data?.courses || payload?.data?.payments || payload?.data?.professors) payload = payload.data;
|
|
if (!payload?.courses && !payload?.payments && !payload?.professors) {
|
|
throw new AppError('VALIDATION_FAILED', null, 'Invalid import payload');
|
|
}
|
|
|
|
const result = await dataImportService.importData(payload);
|
|
return successResponse(res, 200, 'Data imported successfully', result);
|
|
});
|