关于 nestjs-drizzle-crud-generator
面向 NestJS 应用的生成器技能,可创建基于 Drizzle ORM 的 CRUD 模块。它按文档所述的 monorepo 模式生成控制器、服务、Zod 验证 DTO、Schema 和 Jest 测试。
主要功能
- 01生成 CRUD 控制器和服务
- 02创建经 Zod 验证的 DTO
- 03生成 Drizzle Schema
- 04支持分页和筛选
- 05生成使用模拟数据库的 Jest 测试
适用场景
- 01为新实体搭建模块框架
- 02添加数据库驱动的功能
- 03生成经过验证的 API 输入
- 04为 CRUD 操作创建测试
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ giuseppe-trisciuoglio/ developer-kit --skill nestjs-drizzle-crud-generator安装后在 Claude Code 中输入/nestjs-drizzle-crud-generator确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
assets/templates/controller-template.tsdto-template.tsmodule-template.tsservice-template.tstable-template.tstest-template.tsreferences/field-types.mdscripts/generate_crud.py详细介绍
NestJS Drizzle CRUD 生成器
概述
使用 Drizzle ORM 自动为 NestJS 应用生成完整的 CRUD 模块。按照 zaccheroni-monorepo 模式创建所有必要文件:功能模块、控制器、服务、经过 Zod 验证的 DTO、Drizzle 架构和 Jest 单元测试。
适用场景
- 创建包含完整 CRUD 端点的新实体模块
- 构建由数据库支持的 NestJS 功能
- 使用 Zod 验证生成类型安全的 DTO
- 添加使用 Drizzle ORM 查询的服务
- 创建使用模拟数据库的单元测试
使用说明
步骤 1:定义实体字段
收集实体定义:
- 实体名称(例如,
user、product、order) - 字段及其类型的列表(支持的类型见
references/field-types.md) - 必填字段与带默认值的可选字段
步骤 2:运行生成器
python scripts/generate_crud.py --feature <name> --fields '<json-array>' --output <path>
步骤 3:验证生成的文件
检查是否已创建所有预期文件:
ls -la libs/server/<feature-name>/src/lib/
预期结构:
controllers/
services/
dto/
schema/
<feature>-feature.module.ts
步骤 4:运行 TypeScript 编译
cd libs/server && npx tsc --noEmit
步骤 5:运行单元测试
cd libs/server && npm test -- --testPathPattern=<feature-name>
示例
生成 User 模块
python scripts/generate_crud.py \
--feature user \
--fields '[{"name": "name", "type": "string", "required": true}, {"name": "email", "type": "email", "required": true}, {"name": "password", "type": "string", "required": true}]' \
--output ./libs/server
生成 Product 模块
python scripts/generate_crud.py \
--feature product \
--fields '[{"name": "title", "type": "string", "required": true}, {"name": "price", "type": "number", "required": true}, {"name": "description", "type": "text", "required": false}, {"name": "inStock", "type": "boolean", "required": false, "default": true}]' \
--output ./libs/server
生成的结构
libs/server/{feature-name}/
├── src/
│ ├── index.ts
│ └── lib/
│ ├── {feature}-feature.module.ts
│ ├── controllers/
│ │ ├── index.ts
│ │ └── {feature}.controller.ts
│ ├── services/
│ │ ├── index.ts
│ │ ├── {feature}.service.ts
│ │ └── {feature}.service.spec.ts
│ ├── dto/
│ │ ├── index.ts
│ │ └── {feature}.dto.ts
│ └── schema/
│ └── {feature}.table.ts
功能
模块
- 使用
forRootAsync模式进行延迟配置 - 导出生成的服务,供其他模块使用
- 导入 DatabaseModule,以使用功能表
控制器
- 完整的 CRUD 端点:POST、GET、PATCH、DELETE
- 分页查询参数验证
- 集成 Zod 验证管道
服务
- Drizzle ORM 查询方法
- 支持软删除(通过
deletedAt列) - 使用 limit/offset 进行分页
- 支持筛选
- 类型安全的返回类型
DTO
- 用于创建和更新的 Zod 架构
- 用于筛选的查询参数架构
- NestJS DTO 集成
测试
- Jest 测试套件
- 模拟 Drizzle 数据库
- 覆盖所有 CRUD 操作的测试用例
手动集成
生成后,将其集成到应用模块中:
// app.module.ts
import { {{FeatureName}}FeatureModule } from '@your-org/server-{{feature}}';
@Module({
imports: [
{{FeatureName}}FeatureModule.forRootAsync({
useFactory: () => ({
defaultPageSize: 10,
maxPageSize: 100,
}),
}),
],
})
export class AppModule {}
依赖项
所需软件包:
@nestjs/common@nestjs/coredrizzle-ormdrizzle-zodzodnestjs-zod
最佳实践
- 提交前验证:提交生成的代码前,始终运行
tsc --noEmit和测试 - 自定义服务:验证后,将业务逻辑添加到生成的服务中
- 数据库迁移:为生成的 Drizzle 架构单独创建迁移
- 使用生成的类型:在应用代码中引用生成的类型
- 检查 DTO:根据 API 要求调整 Zod 验证规则
限制和警告
- 仅软删除:删除操作使用软删除(
deletedAt时间戳)。硬删除需要手动修改 - 不包含身份验证:生成的代码不包含身份验证守卫,请根据安全要求添加
- 仅基本 CRUD:复杂查询、事务或业务逻辑必须手动实现
- JSON 转义:在命令行传递字段时,JSON 数组需使用单引号括起
评论
支持 Markdown