Files
gameno-api/components/dataImport/dataImportController.js
T
kavehhn 06efcd5b90 feat: store payment installments in a transactions collection
Move embedded payment rows into Transaction documents with due dates so remaining tuition can be tracked separately from paid amounts.
2026-08-16 07:32:27 +03:30

29 lines
985 B
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 = payload.data;
if (!payload?.courses && !payload?.payments) {
throw new AppError('VALIDATION_FAILED', null, 'Invalid import payload');
}
const result = await dataImportService.importData(payload);
return successResponse(res, 200, 'Data imported successfully', result);
});