2025-04-28 12:25:20 +08:00
|
|
|
|
const express = require('express');
|
|
|
|
|
const router = express.Router();
|
|
|
|
|
const {
|
|
|
|
|
getServices,
|
|
|
|
|
getServiceVersionsByClassName,
|
|
|
|
|
saveServiceVersion,
|
|
|
|
|
createService
|
2025-05-15 16:59:12 +08:00
|
|
|
|
} = require('../utils/service-utils');
|
2025-04-28 12:25:20 +08:00
|
|
|
|
|
|
|
|
|
// 获取所有服务列表
|
|
|
|
|
router.get('/services', (req, res) => {
|
|
|
|
|
try {
|
|
|
|
|
const services = getServices();
|
|
|
|
|
res.json(services);
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error('获取服务列表失败:', error);
|
|
|
|
|
res.status(500).json({ error: '获取服务列表失败', details: error.message });
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// 获取指定ClassName的服务版本
|
|
|
|
|
router.get('/service-versions/:className', (req, res) => {
|
|
|
|
|
try {
|
|
|
|
|
const className = req.params.className;
|
|
|
|
|
if (!className) {
|
|
|
|
|
return res.status(400).json({ error: '服务类名不能为空' });
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const versions = getServiceVersionsByClassName(className);
|
|
|
|
|
|
|
|
|
|
// 确保版本列表每项都有Name属性,如果没有则使用列名一致性处理
|
|
|
|
|
const processedVersions = versions.map(version => {
|
|
|
|
|
// 如果没有Name属性(可能是表结构原因),则使用与前端组件兼容的方式
|
|
|
|
|
if (version.Name === undefined && version.ServiceName) {
|
|
|
|
|
version.Name = version.ServiceName;
|
|
|
|
|
}
|
|
|
|
|
return version;
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
res.json(processedVersions);
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error(`获取服务版本失败: ${error.message}`);
|
|
|
|
|
res.status(500).json({ error: '获取服务版本失败', details: error.message });
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// 保存服务版本信息
|
|
|
|
|
router.post('/service-versions', (req, res) => {
|
|
|
|
|
try {
|
|
|
|
|
const versionData = req.body;
|
|
|
|
|
|
|
|
|
|
if (!versionData || !versionData.ClassName) {
|
|
|
|
|
return res.status(400).json({ error: '缺少必要的服务版本数据' });
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 确保数据字段一致性
|
|
|
|
|
if (versionData.ServiceName === undefined && versionData.Name) {
|
|
|
|
|
versionData.ServiceName = versionData.Name;
|
|
|
|
|
}
|
|
|
|
|
|
2025-05-28 10:01:28 +08:00
|
|
|
|
// 验证 CmdList 和 OtherParam 是否为有效的 JSON 字符串
|
|
|
|
|
if (versionData.CmdList !== undefined) {
|
|
|
|
|
try {
|
|
|
|
|
JSON.parse(versionData.CmdList);
|
|
|
|
|
} catch (e) {
|
|
|
|
|
return res.status(400).json({ error: 'CmdList 必须是有效的 JSON 字符串' });
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (versionData.OtherParam !== undefined) {
|
|
|
|
|
try {
|
|
|
|
|
JSON.parse(versionData.OtherParam);
|
|
|
|
|
} catch (e) {
|
|
|
|
|
return res.status(400).json({ error: 'OtherParam 必须是有效的 JSON 字符串' });
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-04-28 12:25:20 +08:00
|
|
|
|
const result = saveServiceVersion(versionData);
|
|
|
|
|
res.json(result);
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error(`保存服务版本失败: ${error.message}`);
|
|
|
|
|
res.status(500).json({ error: '保存服务版本失败', details: error.message });
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// 创建新服务
|
|
|
|
|
router.post('/services', (req, res) => {
|
|
|
|
|
try {
|
|
|
|
|
const serviceData = req.body;
|
|
|
|
|
|
|
|
|
|
if (!serviceData || !serviceData.ClassName || !serviceData.ServiceName || !serviceData.ServiceName_CN) {
|
|
|
|
|
return res.status(400).json({ error: '缺少必要的服务数据' });
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 验证类名是否以XN开头
|
|
|
|
|
if (!serviceData.ClassName.startsWith('XN')) {
|
|
|
|
|
return res.status(400).json({ error: '服务类名必须以XN开头' });
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const result = createService(serviceData);
|
|
|
|
|
res.json(result);
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error(`创建服务失败: ${error.message}`);
|
|
|
|
|
res.status(500).json({ error: '创建服务失败', details: error.message });
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
module.exports = router;
|