# Kubrickcode Workflow Toolkit Nestjs

> NestJS Development Standards

- Skill: `tomevault-io/kubrickcode-workflow-toolkit-nestjs` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add tomevault-io/kubrickcode-workflow-toolkit-nestjs`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tomevault-io/kubrickcode-workflow-toolkit-nestjs/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Productivity
- Author: tomevault-io (https://skillmd.com/u/tomevault-io)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/tomevault-io/kubrickcode-workflow-toolkit-nestjs

---


# NestJS Development Standards

## Module Organization Principles

### Domain-Centric Modularization

Organize modules by business domain, not by function.

- ❌ Bad: `controllers/`, `services/`, `repositories/`
- ✅ Good: `users/`, `products/`, `orders/`

### Single Responsibility Module

Each module is responsible for only one domain.

- Separate common functionality into `common/` or `shared/` modules
- Inter-domain communication must go through Services only

## Dependency Injection Rules

### Constructor Injection Only

Property injection (@Inject) is forbidden.

```typescript
// ✅ Good
constructor(private readonly userService: UserService) {}

// ❌ Bad
@Inject() userService: UserService;
```

### Provider Registration Location

Providers are registered only in the module where they are used.

- Minimize global providers
- Use forRoot/forRootAsync only in AppModule

## Decorator Usage Rules

### Prioritize Custom Decorators

Abstract repeated decorator combinations into custom decorators.

```typescript
// Create custom decorator when combining 3+ decorators
@Auth() // Integrates @UseGuards + @ApiBearerAuth + @CurrentUser
```

### Decorator Order

Arrange in execution order from top to bottom.

1. Metadata decorators (@ApiTags, @Controller, @Resolver)
2. Guards/Interceptors (@UseGuards, @UseInterceptors)
3. Route decorators (@Get, @Post, @Query, @Mutation)
4. Parameter decorators (@Body, @Param, @Args)

## DTO/Entity Rules

### DTO is Pure Data Transfer

Business logic is forbidden; only validation is allowed.

```typescript
// ✅ Good: Validation only
class CreateUserDto {
  @IsEmail()
  email: string;
}

// ❌ Bad: Contains business logic
class CreateUserDto {
  toEntity(): User {} // Forbidden
}
```

### Separate Entity and DTO

Never return Entity directly; always convert to DTO.

- Request: CreateInput, UpdateInput (GraphQL) / CreateDto, UpdateDto (REST)
- Response: Type definition or plain object

## Error Handling

### Domain-Specific Exception Filter

Each domain has its own Exception Filter.

```typescript
@Module({
  providers: [
    {
      provide: APP_FILTER,
      useClass: UserExceptionFilter,
    },
  ],
})
```

### Explicit Error Throwing

Always throw Exception explicitly in all error situations.

- REST: Use HttpException series
- GraphQL: Use GraphQLError or custom error
- Forbid implicit null/undefined returns
- Error messages should be understandable by users

---
> Converted and distributed by [TomeVault](https://tomevault.io/claim/kubrickcode) — claim your Tome and manage your conversions.
<!-- tomevault:4.0:skill_md:2026-04-13 -->

