87 lines
3.5 KiB
JavaScript
87 lines
3.5 KiB
JavaScript
const DevManagementService = require('../../services/dev/DevManagementService');
|
|
const { logger } = require('../../middleware/logger');
|
|
|
|
function previewSql(sql, max = 180) {
|
|
if (!sql) return '';
|
|
const s = String(sql).replace(/\s+/g, ' ').trim();
|
|
return s.length > max ? `${s.slice(0, max)}…` : s;
|
|
}
|
|
|
|
exports.importSqlDump = async (req, res) => {
|
|
try {
|
|
if (!req.file || !req.file.buffer) {
|
|
return res.status(400).json({ success: false, error: 'SQL dump file is required' });
|
|
}
|
|
const sql = req.file.buffer.toString('utf8');
|
|
if (!sql.trim()) {
|
|
return res.status(400).json({ success: false, error: 'SQL dump file is empty' });
|
|
}
|
|
const start = Date.now();
|
|
const { rows, fields } = await DevManagementService.executeDump(sql);
|
|
const durationMs = Date.now() - start;
|
|
|
|
const isMulti = Array.isArray(fields) && fields.length > 0 && Array.isArray(fields[0]);
|
|
|
|
return res.json({
|
|
success: true,
|
|
data: { result: rows, isMulti: !!isMulti },
|
|
meta: { durationMs }
|
|
});
|
|
} catch (e) {
|
|
logger.error('[DevManagementController.importSqlDump] error', { msg: e?.message, sql: previewSql(req.file?.buffer?.toString('utf8')) });
|
|
return res.status(500).json({ success: false, error: e?.message || 'SQL execution failed' });
|
|
}
|
|
};
|
|
|
|
exports.listFolderStructureIssues = async (_req, res) => {
|
|
try {
|
|
const { list, meta } = await DevManagementService.listFolderStructureIssues();
|
|
return res.json({ success: true, data: list, meta });
|
|
} catch (e) {
|
|
logger.error('[DevManagementController.listFolderStructureIssues] error', { msg: e?.message });
|
|
return res.status(500).json({ success: false, error: e?.message || 'Failed to list folder structure issues' });
|
|
}
|
|
};
|
|
|
|
exports.createFolderStructure = async (req, res) => {
|
|
try {
|
|
const userId = req.body && (req.body.userId || req.body.user_id);
|
|
const { results, meta } = await DevManagementService.createFolderStructure({ userId });
|
|
return res.json({ success: true, data: results, meta });
|
|
} catch (e) {
|
|
logger.error('[DevManagementController.createFolderStructure] error', { msg: e?.message });
|
|
return res.status(500).json({ success: false, error: e?.message || 'Failed to create folder structure' });
|
|
}
|
|
};
|
|
|
|
exports.listLooseFiles = async (_req, res) => {
|
|
try {
|
|
const { list, meta } = await DevManagementService.listLooseFiles();
|
|
return res.json({ success: true, data: list, meta });
|
|
} catch (e) {
|
|
logger.error('[DevManagementController.listLooseFiles] error', { msg: e?.message });
|
|
return res.status(500).json({ success: false, error: e?.message || 'Failed to list loose files' });
|
|
}
|
|
};
|
|
|
|
exports.moveLooseFilesToContract = async (req, res) => {
|
|
try {
|
|
const userId = req.body && (req.body.userId || req.body.user_id);
|
|
const { results, meta } = await DevManagementService.moveLooseFilesToContract({ userId });
|
|
return res.json({ success: true, data: results, meta });
|
|
} catch (e) {
|
|
logger.error('[DevManagementController.moveLooseFilesToContract] error', { msg: e?.message });
|
|
return res.status(500).json({ success: false, error: e?.message || 'Failed to move loose files' });
|
|
}
|
|
};
|
|
|
|
exports.listGhostDirectories = async (_req, res) => {
|
|
try {
|
|
const { list, meta } = await DevManagementService.listGhostDirectories();
|
|
return res.json({ success: true, data: list, meta });
|
|
} catch (e) {
|
|
logger.error('[DevManagementController.listGhostDirectories] error', { msg: e?.message });
|
|
return res.status(500).json({ success: false, error: e?.message || 'Failed to list ghost directories' });
|
|
}
|
|
};
|