mcpField
N
nestjs-drizzle-crud-generator

nestjs-drizzle-crud-generator

github.com/giuseppe-trisciuoglio开发3653.6k 次安装7 周前更新
代码仓库

关于 nestjs-drizzle-crud-generator

面向 NestJS 应用的生成器技能,可创建基于 Drizzle ORM 的 CRUD 模块。它按文档所述的 monorepo 模式生成控制器、服务、Zod 验证 DTO、Schema 和 Jest 测试。

主要功能

  1. 01生成 CRUD 控制器和服务
  2. 02创建经 Zod 验证的 DTO
  3. 03生成 Drizzle Schema
  4. 04支持分页和筛选
  5. 05生成使用模拟数据库的 Jest 测试

适用场景

  1. 01为新实体搭建模块框架
  2. 02添加数据库驱动的功能
  3. 03生成经过验证的 API 输入
  4. 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.ts
dto-template.ts
module-template.ts
service-template.ts
table-template.ts
test-template.ts
references/
field-types.md
scripts/
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/core
  • drizzle-orm
  • drizzle-zod
  • zod
  • nestjs-zod

最佳实践

  1. 提交前验证:提交生成的代码前,始终运行 tsc --noEmit 和测试
  2. 自定义服务:验证后,将业务逻辑添加到生成的服务中
  3. 数据库迁移:为生成的 Drizzle 架构单独创建迁移
  4. 使用生成的类型:在应用代码中引用生成的类型
  5. 检查 DTO:根据 API 要求调整 Zod 验证规则

限制和警告

  • 仅软删除:删除操作使用软删除(deletedAt 时间戳)。硬删除需要手动修改
  • 不包含身份验证:生成的代码不包含身份验证守卫,请根据安全要求添加
  • 仅基本 CRUD:复杂查询、事务或业务逻辑必须手动实现
  • JSON 转义:在命令行传递字段时,JSON 数组需使用单引号括起

评论

支持 Markdown