feat: add append-only course/user data import and expand user profile

Support uploading structured JSON to create courses, classes, and students without wiping existing data, and merge user name fields while adding gender and registration details from source sheets.
This commit is contained in:
2026-08-15 01:31:44 +03:30
parent 35704409ec
commit bf5e66fa95
19 changed files with 2314 additions and 569 deletions
@@ -0,0 +1,28 @@
// /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 = payload.data;
if (!payload?.courses && payload?.version && payload?.courses == null) {
throw new AppError('VALIDATION_FAILED', null, 'Invalid import payload');
}
const result = await dataImportService.importData(payload);
return successResponse(res, 200, 'Data imported successfully', result);
});