AI代码生成工具

This commit is contained in:
李琦
2026-08-10 15:51:04 +08:00
parent 089fa2f3eb
commit e8f30a1275
18 changed files with 3273 additions and 558 deletions

View File

@@ -195,8 +195,17 @@ export function transformAiToStandard(aiData: any): CodeGenData {
};
}
/** 系统自动维护字段,禁止出现在业务 field 里 */
const RESERVED_FIELD_NAMES = new Set([
'id',
'status',
'created_at',
'updated_at',
'deleted_at',
]);
/**
* 数据验证
* 数据验证(导入前兜底,避免脏 class_name / 字段名进建表 SQL)
*/
export function validateData(data: CodeGenData): {
valid: boolean;
@@ -205,6 +214,12 @@ export function validateData(data: CodeGenData): {
if (!data.class_name || !data.class_name.trim()) {
return { valid: false, message: '类名不能为空' };
}
if (!/^[A-Z][A-Za-z0-9]{0,63}$/.test(data.class_name.trim())) {
return {
valid: false,
message: '类名须为英文 PascalCase(如 VipMember),不能含中文或下划线',
};
}
if (!data.class_comment || !data.class_comment.trim()) {
return { valid: false, message: '中文名称不能为空' };
@@ -218,11 +233,31 @@ export function validateData(data: CodeGenData): {
return { valid: false, message: '至少需要一个字段' };
}
// 验证字段
const seen = new Set<string>();
for (const field of data.field) {
if (!field.name || !field.name.trim()) {
const name = (field.name || '').trim();
if (!name) {
return { valid: false, message: '字段名不能为空' };
}
if (name.length > 64 || /[\s,。::|()()]/.test(name)) {
return {
valid: false,
message: `字段名非法「${name}」,须为短小写 snake_case`,
};
}
if (!/^[a-z][a-z0-9_]{0,63}$/.test(name)) {
return {
valid: false,
message: `字段名非法「${name}」,须为小写 snake_case(如 user_name)`,
};
}
if (RESERVED_FIELD_NAMES.has(name)) {
return { valid: false, message: `字段「${name}」为系统保留字段` };
}
if (seen.has(name)) {
return { valid: false, message: `字段名重复「${name}」` };
}
seen.add(name);
}
return { valid: true };