关于 ln-723-seed-data-generator
ln-723-seed-data-generator 可从现有 ORM 模式或实体定义生成种子数据文件。它支持 C#、TypeScript、Python、JSON 和 SQL,并使用确定性 faker 数据及关系检查。
主要功能
- 01解析六种所列 ORM 的模式
- 02接收实体定义或使用起始模板
- 03生成 C#、TypeScript、Python、JSON 和 SQL
- 04使用固定种子的 faker 数据以便复现
- 05检查语法和外键关系
适用场景
- 01为已有 ORM 模式的项目生成测试数据
- 02根据实体列表生成样例数据
- 03准备 API 测试或数据库导入所需的种子数据
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ levnikolaevich/ claude-code-skills --skill ln-723-seed-data-generator安装后在 Claude Code 中输入/ln-723-seed-data-generator确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/data_generation.mdorm_patterns.mdrelationship_mapping.mdtype_mapping.md详细介绍
路径: 文件路径(
references/、../ln-*)均相对于此技能目录。
ln-723-seed-data-generator
类型: L3 Worker 类别: 7XX 项目引导
通用种子数据生成器,支持两种模式:MIGRATE(解析现有 ORM 架构)或 GENERATE(根据实体定义创建)。可输出为任意目标格式(C#、TypeScript、Python、JSON、SQL)。
用途与范围
| 方面 | 描述 |
|---|---|
| 输入 | ORM 架构文件(MIGRATE)或实体列表(GENERATE) |
| 输出 | 目标格式的种子数据文件 |
| 模式 | MIGRATE:解析现有 ORM → 种子数据。GENERATE:实体定义 → 种子数据 |
范围边界:
- 解析 ORM 架构定义或接收实体列表
- 按请求的目标格式生成种子数据
- 使用 faker 库创建逼真的示例数据
- 不生成数据库迁移、EF Core 配置或 ORM 模型
模式选择
| 模式 | 适用情况 | 输入 | 来源 |
|---|---|---|---|
| MIGRATE | TRANSFORM 流水线 — 找到现有 ORM 架构 | ORM 架构文件 | Drizzle、Prisma、TypeORM、EF Core、SQLAlchemy、Django ORM |
| GENERATE | CREATE 流水线 — 没有现有架构 | 来自 ln-700 Phase 0 的实体列表 | 用户提供或入门模板(User、Role) |
如果 GENERATE 模式未收到实体列表,则生成包含 User(id、name、email、role、createdAt)和 Role(id、name、description)的入门模板。
目标格式
| 格式 | 输出文件 | Faker 库 | 用途 |
|---|---|---|---|
| C# MockData | MockData.cs | Bogus | .NET 项目 |
| TypeScript fixtures | seed.ts | Faker.js | Node/React 项目 |
| Python factories | factories.py | Faker (Python) | Django/Flask 项目 |
| JSON | seed.json | — | API 测试、导入脚本 |
| SQL | seed.sql | — | 直接填充数据库 |
工作流
| 阶段 | 名称 | 操作 | 输出 |
|---|---|---|---|
| 1 | 解析/定义 | 1A:解析 ORM 架构(MIGRATE)或 1B:接收实体列表(GENERATE) | 实体模型 |
| 2 | 映射类型 | 将通用类型映射应用于目标格式 | 目标类型定义 |
| 3 | 生成种子数据 | 使用基于 faker 的真实数据创建种子文件 | 种子数据文件 |
| 4 | 验证 | 验证关系并检查语法 | 有效的种子文件 |
阶段 1:解析/定义
1A:MIGRATE 模式 — 解析 ORM 架构
| 步骤 | 操作 | 参考 |
|---|---|---|
| 1A.1 | 定位架构文件 | — |
| 1A.2 | 自动检测 ORM 类型 | orm_patterns.md — ORM 自动检测表 |
| 1A.3 | 提取表/模型定义 | orm_patterns.md — 各 ORM 的解析部分 |
| 1A.4 | 提取带类型的列定义 | orm_patterns.md |
| 1A.5 | 识别约束(PK、FK、可空、唯一) | orm_patterns.md |
| 1A.6 | 提取枚举定义 | orm_patterns.md |
1B:GENERATE 模式 — 接收实体定义
| 步骤 | 操作 | 参考 |
|---|---|---|
| 1B.1 | 从编排器接收实体列表(或使用入门模板) | — |
| 1B.2 | 解析实体定义(名称、字段、类型) | — |
| 1B.3 | 根据字段名推断关系(userId → 指向 User 的外键) | relationship_mapping.md |
| 1B.4 | 应用默认约束(id = PK,*Id = FK) | — |
输出: 包含列、类型和约束的实体模型。
阶段 2:映射类型
将实体类型转换为目标格式的类型。
| 步骤 | 操作 | 参考 |
|---|---|---|
| 2.1 | 选择目标格式(来自编排器参数) | — |
| 2.2 | 将列类型映射到目标格式 | type_mapping.md — 通用类型映射表 |
| 2.3 | 确定每个目标的可空状态 | type_mapping.md |
| 2.4 | 映射外键和关系 | relationship_mapping.md |
| 2.5 | 将名称转换为目标约定 | 参见下方的名称约定表 |
各目标的名称约定:
| 目标 | 类/模型 | 属性/字段 | 文件 |
|---|---|---|---|
| C# | PascalCase 单数形式 | PascalCase | PascalCase.cs |
| TypeScript | PascalCase 单数形式 | camelCase | camelCase.ts |
| Python | PascalCase 单数形式 | snake_case | snake_case.py |
| JSON | camelCase | camelCase | kebab-case.json |
| SQL | snake_case 复数形式 | snake_case | snake_case.sql |
阶段 3:生成种子数据
使用 faker 库创建包含真实数据的种子文件。
| 步骤 | 操作 | 参考 |
|---|---|---|
| 3.1 | 确定生成顺序(父级 → 子级) | relationship_mapping.md |
| 3.2 | 为所有实体生成 ID(GUID/UUID) | data_generation.md |
| 3.3 | 使用 faker 生成字段值 | data_generation.md、type_mapping.md — Faker 集成 |
| 3.4 | 确保外键关系有效(子级引用现有父级 ID) | relationship_mapping.md |
| 3.5 | 以目标格式编写种子文件 | — |
Faker 集成规则: 所有生成的种子文件都必须使用 faker 库生成真实数据,并采用确定性设定种子(使用固定种子值以确保可复现)。
| 目标 | Faker 设置 |
|---|---|
| C# | var faker = new Bogus.Faker(); Randomizer.Seed = new Random(42); |
| TypeScript | import { faker } from '@faker-js/faker'; faker.seed(42); |
| Python | from faker import Faker; fake = Faker(); Faker.seed(42) |
按依赖关系确定生成顺序:
| 顺序 | 实体类型 | 生成时机 |
|---|---|---|
| 1 | 根实体(无外键) | 首先 |
| 2 | 第一层子级 | 父级已存在 |
| 3 | 第二层子级 | 祖父级已存在 |
| N | 最深层子级 | 所有祖先均已存在 |
阶段 4:验证
| 检查项 | 方法 | 预期结果 |
|---|---|---|
| 语法有效 | 特定语言的检查 | 无语法错误 |
| 外键有效 | 交叉引用 | 所有外键均指向现有 ID |
| 类型正确 | 类型分析 | 符合目标格式的类型 |
| 名称符合约定 | 模式检查 | 遵循目标对应的命名约定 |
| Faker 具有确定性 | 使用相同种子重新运行 | 输出完全相同 |
支持的 ORM 检测
| ORM | 检测模式 | 生态系统 |
|---|---|---|
| Drizzle | pgTable()、mysqlTable()、sqliteTable() | Node.js |
| Prisma | .prisma 文件中的 model X { 语法 | Node.js |
| TypeORM | @Entity()、@Column() 装饰器 | Node.js |
| EF Core | DbContext、DbSet<>、[Table] 属性 | .NET |
| SQLAlchemy | Base = declarative_base()、Column() | Python |
| Django ORM | models.Model、models.CharField() | Python |
实体转换规则
| 源 | 目标 | 转换 |
|---|---|---|
| 表名(复数,snake) | 类名(单数,Pascal) | user_profiles → UserProfile |
| 列名(snake) | 属性名(目标约定) | created_at → CreatedAt / createdAt / created_at |
| 枚举名称 | 枚举类型(Pascal) | status_enum → StatusEnum |
| 外键列 | 导航属性 | user_id → UserId / userId |
示例数据指南
| 字段类型 | 示例数量 | 分布 |
|---|---|---|
| 根实体 | 3-5 项 | 状态/优先级各不相同 |
| 子级实体 | 5-10 项 | 分布于各父级 |
| 叶子实体 | 10-20 项 | 多样且真实 |
关键规则
- 单一职责: 仅生成种子数据,不生成 ORM 模型或迁移
- 幂等: 使用相同种子重新运行时,可生成完全相同的输出
- 有效关系: 所有外键都必须引用现有的父级 ID
- 必须使用 Faker: 使用 Faker 库生成逼真的数据,绝不使用随机字符串
- 确定性播种: 使用固定种子值(42),确保重复运行结果一致
- 生成顺序: 始终先生成父级,再生成子级
- 模式识别: MIGRATE 解析文件;GENERATE 接受定义——不得混用
完成定义
- 已确定模式(MIGRATE 或 GENERATE)
- 已提取或定义实体模型,包含所有字段和约束
- 已选择目标格式并应用类型映射
- 已使用 Faker 生成器生成逼真数据的种子数据文件
- 已验证确定性播种(重新运行会生成完全相同的输出)
- 外键均引用有效的父级 ID
- 名称符合目标格式的约定
- 每个实体都包含 5-10 条示例数据
风险缓解
| 风险 | 检测方式 | 缓解措施 |
|---|---|---|
| ORM 类型未知 | 自动检测失败 | 记录警告,并向编排器请求 ORM 提示 |
| 类型映射无效 | 列类型未知 | 使用字符串作为后备类型,并记录警告 |
| 外键不匹配 | 外键引用了不存在的 ID | 先生成父级,再进行验证 |
| GENERATE 中没有实体列表 | 输入为空 | 使用入门模板(User、Role) |
| 名称冲突 | 类名或表名重复 | 添加功能名称作为前缀 |
| 循环引用 | 自引用形成循环 | 限制深度,并验证关系图 |
参考文件
| 文件 | 用途 |
|---|---|
references/orm_patterns.md | ORM 自动检测和架构解析模式(Drizzle、Prisma、TypeORM、EF Core、SQLAlchemy、Django) |
references/type_mapping.md | 通用类型映射(与 ORM 无关 → C#、TypeScript、Python)+ Faker 集成 |
references/data_generation.md | 逼真示例数据模式和生成规则 |
references/relationship_mapping.md | 外键处理、生成顺序和关系推断 |
版本: 3.0.0 最后更新: 2026-02-07
评论
支持 Markdown