Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
88 changes: 87 additions & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,13 +64,99 @@ generated/
└── index.ts
```

### Configuration Options

The generator is configured via Prisma schema:
```prisma
generator class_validator {
provider = "prisma-class-validator-generator"
output = "./generated" // optional, defaults to ./generated
swagger = "true" // optional, adds @ApiProperty decorators
separateRelationFields = "true" // optional, creates separate base/relation classes
}
```

#### Configuration Flags

**`swagger`** (optional, default: `false`)
- Adds NestJS Swagger `@ApiProperty` decorators alongside class-validator decorators
- Includes type information, examples, array handling, and enum values
- Useful for automatic API documentation generation in NestJS applications

**`separateRelationFields`** (optional, default: `false`)
- Splits models into separate base and relation classes for better NestJS integration
- Creates `ModelBase` (scalar fields only), `ModelRelations` (relations only), and combined `Model` class
- Enables use of NestJS mapped types like `PickType`, `PartialType`, etc.
- Perfect for DTOs that need to exclude relations or work with specific field subsets

#### Example Usage

**Basic Usage (class-validator only):**
```prisma
generator class_validator {
provider = "prisma-class-validator-generator"
output = "./generated"
}
```
Generates:
```typescript
export class User {
@IsDefined()
@IsInt()
id!: number;

@IsDefined()
@IsString()
email!: string;
}
```

**With Swagger Support:**
```prisma
generator class_validator {
provider = "prisma-class-validator-generator"
output = "./generated" // optional, defaults to ./generated
output = "./generated"
swagger = "true"
}
```
Generates:
```typescript
export class User {
@IsDefined()
@ApiProperty({ example: 'Generated by autoincrement', type: "integer" })
@IsInt()
id!: number;

@IsDefined()
@ApiProperty({ type: "string" })
@IsString()
email!: string;
}
```

**With Relation Splitting:**
```prisma
generator class_validator {
provider = "prisma-class-validator-generator"
output = "./generated"
separateRelationFields = "true"
}
```
Generates:
- `UserBase.model.ts` - Only scalar fields with decorators
- `UserRelations.model.ts` - Only relation fields with decorators
- `User.model.ts` - Combined class extending UserBase with relations

**Full NestJS Integration:**
```prisma
generator class_validator {
provider = "prisma-class-validator-generator"
output = "./generated"
swagger = "true"
separateRelationFields = "true"
}
```
Perfect for NestJS APIs with automatic Swagger docs and flexible DTOs.

## Modern Development Setup (Prisma 6+)

Expand Down
55 changes: 52 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -235,8 +235,10 @@ Customize the generator behavior:

```prisma
generator class_validator {
provider = "prisma-class-validator-generator"
output = "./src/models" // Output directory
provider = "prisma-class-validator-generator"
output = "./src/models" // Output directory
swagger = "true" // Add Swagger decorators
separateRelationFields = "true" // Split base/relation classes
}
```

Expand All @@ -245,6 +247,53 @@ generator class_validator {
| Option | Type | Default | Description |
|--------|------|---------|-------------|
| `output` | `string` | `"./generated"` | Output directory for generated models |
| `swagger` | `string` | `"false"` | Add NestJS `@ApiProperty` decorators for Swagger docs |
| `separateRelationFields` | `string` | `"false"` | Generate separate base and relation classes for flexible DTOs |

### 🌟 New in v6.0.0-beta.1: NestJS & Swagger Integration

#### Swagger Support (`swagger = "true"`)

Automatically generates NestJS Swagger decorators alongside class-validator decorators:

```typescript
export class User {
@IsDefined()
@ApiProperty({ example: 'Generated by autoincrement', type: "integer" })
@IsInt()
id!: number;

@IsDefined()
@ApiProperty({ type: "string" })
@IsString()
email!: string;

@IsOptional()
@ApiProperty({ type: "string", required: false })
@IsString()
name?: string | null;
}
```

#### Relation Field Splitting (`separateRelationFields = "true"`)

Perfect for NestJS DTOs - generates separate classes for maximum flexibility:

- **`UserBase.model.ts`** - Only scalar fields with validation decorators
- **`UserRelations.model.ts`** - Only relation fields
- **`User.model.ts`** - Combined class extending UserBase

This enables powerful NestJS patterns:
```typescript
// Create DTO without relations using PickType
export class CreateUserDto extends PickType(UserBase, ['email', 'name']) {}

// Update DTO with partial fields
export class UpdateUserDto extends PartialType(UserBase) {}

// Full model with relations for responses
export class UserResponseDto extends User {}
```

## 📚 Advanced Usage

Expand Down Expand Up @@ -457,7 +506,7 @@ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file
---

<div align="center">
<p>Made with ❤️ by the Prisma Class Validator Generator team</p>
<p>Made with ❤️ by <strong>Omar Dulaimi</strong></p>
<p>
<a href="https://github.com/omar-dulaimi/prisma-class-validator-generator/stargazers">⭐ Star us on GitHub</a> •
<a href="https://github.com/omar-dulaimi/prisma-class-validator-generator/issues">🐛 Report Issues</a> •
Expand Down
Loading