К основному содержанию
скилл CX Codex

nestjs-best-practices · giuseppe-trisciuoglio — скилл для Claude Code: правила NestJS

Скилл задаёт агенту правила NestJS: модули, области видимости провайдеров, фильтры исключений, DTO-валидация и Drizzle ORM.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add giuseppe-trisciuoglio/developer-kit --skill nestjs-best-practices -a claude-code
Открыть на GitHub

Что делает nestjs-best-practices

Скилл подключается к агенту и подсовывает ему свод правил по NestJS. Внутри шесть разделов: модульная архитектура, внедрение зависимостей, жизненный цикл запроса, обработка ошибок, валидация и работа с базой через Drizzle ORM. К каждому разделу приложен файл с деталями — например, references/arch-module-boundaries.md или references/db-drizzle-patterns.md.

Правила жёсткие. Модуль на каждую доменную фичу, экспорт только того, что нужно снаружи. forwardRef() разрешён как последнее средство, а лучше перестроить модули. Область видимости по умолчанию — DEFAULT, REQUEST и TRANSIENT только с обоснованием. ValidationPipe включается глобально с transform: true и whitelist: true, все свойства DTO получают декораторы class-validator. Клиент Drizzle оборачивается в инжектируемый провайдер, запросы к базе уходят из контроллеров в репозитории.

Есть отдельная таблица «делай / не делай» и разбор примера с модулем Product: модуль, DTO, сервис с доменным исключением, проверка регистрации через grep и npx jest. Скилл работает с Read, Write, Edit, Glob, Grep и Bash. Учтите: REQUEST-провайдер тянет за собой всех зависимых — это повод перепроверить граф зависимостей перед тем, как включать его в сервисе с общим состоянием.

Какие задачи решает

  • разложить доменную фичу по модулям вместо свалки в AppModule
  • выбрать область видимости провайдера и не утащить REQUEST куда не надо
  • сделать единый формат ошибок через фильтр исключений
  • закрыть вход валидацией DTO вместо ручных проверок в контроллере
  • вынести запросы Drizzle из контроллеров в репозиторий

Примеры запросов агенту

  • Разбей фичу Product на модуль, сервис и репозиторий по правилам скилла
  • Проверь мой модуль на антипаттерны NestJS и подскажи, что перестроить
  • Подключи Drizzle ORM как инжектируемый провайдер и убери запросы из контроллера

Как установить nestjs-best-practices

1Через Skills CLI (Vercel)

npx skills add giuseppe-trisciuoglio/developer-kit --skill nestjs-best-practices -a claude-code

2Вручную: положить файлы

~/.claude/skills/nestjs-best-practices/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/nestjs-best-practices/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о nestjs-best-practices

Как установить nestjs-best-practices в Claude?

Выполните npx skills add giuseppe-trisciuoglio/developer-kit --skill nestjs-best-practices -a claude-code. После этого файл скилла лежит в ~/.claude/skills/nestjs-best-practices/SKILL.md.

Что делает nestjs-best-practices?

Даёт агенту свод правил по NestJS: границы модулей, области видимости провайдеров, фильтры исключений, валидацию DTO через class-validator и паттерны Drizzle ORM с отдельными файлами-справочниками.

Чем грозит REQUEST-область видимости провайдера?

Она каскадом распространяется на всех, кто от этого провайдера зависит. Скилл советует брать DEFAULT и переходить на REQUEST только с обоснованием.

Исходный текст

SKILL.md · MIT
---
name: nestjs-best-practices
description: Provides comprehensive NestJS best practices including modular architecture, dependency injection scoping, exception filters, DTO validation with class-validator, and Drizzle ORM integration. Use when designing NestJS modules, implementing providers, creating exception filters, validating DTOs, or integrating Drizzle ORM within NestJS applications.
allowed-tools: Read, Write, Edit, Glob, Grep, Bash
---

# NestJS Best Practices

## Overview

Grounded in the [Official NestJS Documentation](https://docs.nestjs.com/), this skill enforces modular architecture, dependency injection scoping, exception filters, DTO validation with `class-validator`, and Drizzle ORM integration patterns.

## When to Use

- Designing/refactoring NestJS modules or dependency injection
- Creating exception filters, validating DTOs, or integrating Drizzle ORM
- Reviewing code for anti-patterns or onboarding to a NestJS codebase

## Instructions

### 1. Modular Architecture

Follow strict module encapsulation. Each domain feature should be its own `@Module()`:

- Export only what other modules need — keep internal providers private
- Use `forwardRef()` only as a last resort for circular dependencies; prefer restructuring
- Group related controllers, services, and repositories within the same module
- Use a `SharedModule` for cross-cutting concerns (logging, configuration, caching)

See `references/arch-module-boundaries.md` for enforcement rules.

### 2. Dependency Injection

Choose the correct provider scope based on use case:

| Scope       | Lifecycle                    | Use Case                                   |
|-------------|------------------------------|---------------------------------------------|
| `DEFAULT`   | Singleton (shared)           | Stateless services, repositories            |
| `REQUEST`   | Per-request instance         | Request-scoped data (tenant, user context)  |
| `TRANSIENT` | New instance per injection   | Stateful utilities, per-consumer caches     |

- Default to `DEFAULT` scope — only use `REQUEST` or `TRANSIENT` when justified
- Use constructor injection exclusively — avoid property injection
- Register custom providers with `useClass`, `useValue`, `useFactory`, or `useExisting`

See `references/di-provider-scoping.md` for enforcement rules.

### 3. Request Lifecycle

Understand and respect the NestJS request processing pipeline:

```
Middleware → Guards → Interceptors (before) → Pipes → Route Handler → Interceptors (after) → Exception Filters
```

- **Middleware**: Cross-cutting concerns (logging, CORS, body parsing)
- **Guards**: Authorization and authentication checks (return `true`/`false`)
- **Interceptors**: Transform response data, add caching, measure timing
- **Pipes**: Validate and transform input parameters
- **Exception Filters**: Catch and format error responses

### 4. Error Handling

Standardize error responses across the application:

- Extend `HttpException` for HTTP-specific errors
- Create domain-specific exception classes (e.g., `OrderNotFoundException`)
- Implement a global `ExceptionFilter` for consistent error formatting
- Use the Result pattern for expected business logic failures
- Never silently swallow exceptions

See `references/error-exception-filters.md` for enforcement rules.

### 5. Validation

Enforce input validation at the API boundary:

- Enable `ValidationPipe` globally with `transform: true` and `whitelist: true`
- Decorate all DTO properties with `class-validator` decorators
- Use `class-transformer` for type coercion (`@Type()`, `@Transform()`)
- Create separate DTOs for Create, Update, and Response operations
- Never trust raw user input — validate everything

See `references/api-validation-dto.md` for enforcement rules.

### 6. Database Patterns (Drizzle ORM)

Integrate Drizzle ORM following NestJS provider conventions:

- Wrap the Drizzle client in an injectable provider
- Use the Repository pattern for data access encapsulation
- Define schemas in dedicated schema files per domain module
- Use transactions for multi-step operations
- Keep database logic out of controllers

See `references/db-drizzle-patterns.md` for enforcement rules.

## Best Practices

| Area               | Do                                      | Don't                                    |
|--------------------|------------------------------------------|------------------------------------------|
| Modules            | One module per domain feature            | Dump everything in `AppModule`           |
| DI Scoping         | Default to singleton scope               | Use `REQUEST` scope without justification|
| Error Handling     | Custom exception filters + domain errors | Bare `try/catch` with `console.log`      |
| Validation         | Global `ValidationPipe` + DTO decorators | Manual `if` checks in controllers        |
| Database           | Repository pattern with injected client  | Direct DB queries in controllers         |
| Testing            | Unit test services, e2e test controllers | Skip tests or test implementation details|
| Configuration      | `@nestjs/config` with typed schemas      | Hardcode values or use `process.env`     |

## Examples

### Example: New Domain Module with Validation

When building a "Product" feature, follow this workflow:

**1. Create the module with proper encapsulation:**
```typescript
// product/product.module.ts
@Module({
  imports: [DatabaseModule],
  controllers: [ProductController],
  providers: [ProductService, ProductRepository],
  exports: [ProductService], // Only export what others need
})
export class ProductModule {}
```

**2. Create validated DTOs:**
```typescript
// product/dto/create-product.dto.ts
import { IsString, IsNumber, IsPositive, MaxLength } from 'class-validator';

export class CreateProductDto {
  @IsString() @MaxLength(255) readonly name: string;
  @IsNumber() @IsPositive() readonly price: number;
}
```

**3. Service with error handling:**
```typescript
@Injectable()
export class ProductService {
  constructor(private readonly productRepository: ProductRepository) {}

  async findById(id: string): Promise<Product> {
    const product = await this.productRepository.findById(id);
    if (!product) throw new ProductNotFoundException(id);
    return product;
  }
}
```

**4. Verify module registration:**
```bash
# Check module is imported in AppModule
grep -r "ProductModule" src/app.module.ts

# Run e2e to confirm exports work
npx jest --testPathPattern="product"
```

## Constraints and Warnings

1. **Do not mix scopes without justification** — `REQUEST`-scoped providers cascade to all dependents
2. **Never access database directly from controllers** — always go through service and repository layers
3. **Avoid `forwardRef()`** — restructure modules to eliminate circular dependencies
4. **Do not skip `ValidationPipe`** — always validate at the API boundary with DTOs
5. **Never hardcode secrets** — use `@nestjs/config` with environment variables
6. **Keep modules focused** — one domain feature per module, avoid "god modules"

## References

- `references/architecture.md` — Deep-dive into NestJS architectural patterns
- `references/` — Individual enforcement rules with correct/incorrect examples
- `assets/templates/` — Starter templates for common NestJS components

© giuseppe-trisciuoglio · MIT · giuseppe-trisciuoglio/developer-kit

Похожие скиллы

Всё по теме «Бэкенд и API» →

Сначала — nestjs-best-practices от других авторов.

nestjs-best-practices Kadajett Скилл помогает писать, проверять и рефакторить NestJS-код по правилам архитектуры, безопасности, DI и производительности. CX Codex +1 30 400установок nestjs официальный github Правило подключает к GitHub Copilot набор стандартов NestJS: модули, DI, DTO и валидация. Пригодится, когда агент пишет серверный код на TypeScript. ★ 40 418звёзд репо nestjs-expert https://github.com/Jeffallan Скилл помогает проектировать и писать NestJS бэкенд-приложения на TypeScript: модули, сервисы, контроллеры, валидацию, аутентификацию и тесты. Нужен, если строишь REST API или GraphQL с enterprise-паттернами. CX Codex +1 5 900установок nestjs-patterns affaan-m Скилл задаёт архитектурные правила для бэкендов на NestJS и TypeScript: от структуры каталогов до валидации DTO и тестов. CX Codex +1 5 000установок nestjs-modular-monolith Felipe Rodrigues - github.com/felipfr Ведёт от анализа домена до кода: границы модулей, DDD, Clean Architecture и CQRS в одном бэкенде на NestJS. CX Codex +1 329установок openapi-to-application-nodejs-nestjs официальный Awesome Copilot Community Собирает приложение на NestJS по спецификации OpenAPI: скаффолдинг проекта, контроллеры, сервисы. Пригодится, когда контракт API уже есть, а кода ещё нет. ★ 40 418звёзд репо drizzle-orm Mindrally Скилл задаёт агенту правила разработки на Drizzle ORM: схема как код, типы из таблиц, запросы и миграции. CX Codex +1 1 000установок

Из того же набора93

spring-ai-mcp-server-patterns Скилл с шаблонами MCP-серверов на Spring Boot и Spring AI: инструменты через @Tool, промпт-шаблоны, транспорты stdio, HTTP и SSE. CX Codex +1 3 800установок nestjs-code-review Скилл для ревью NestJS-приложений: проверяет контроллеры, сервисы, модули, DI, гарды и работу с базой. Пригодится перед мержем пул-реквеста. CX Codex +1 3 800установок spring-boot-resilience4j Скилл добавляет паттерны отказоустойчивости Resilience4j в Spring Boot 3.x. Он помогает настроить размыкатели цепи и повторные вызовы при сбоях внешних сервисов. CX Codex +1 3 800установок unit-test-service-layer Скилл задаёт агенту шаблон юнит-тестов сервисного слоя на Mockito: моки репозиториев, проверка вызовов, сценарии с исключениями. CX Codex +1 3 800установок spring-boot-cache Помогает настроить кэширование в Spring Boot через Caffeine, Redis или Ehcache. Пригодится для аннотирования сервисов, задания TTL и поиска причин промахов кэша. CX Codex +1 3 800установок zod-validation-utilities Помогает писать схемы Zod v4 для проверки API, форм и конфигурации в TypeScript. Пригодится для разбора внешних данных и понятной обработки ошибок. CX Codex +1 3 800установок spring-boot-event-driven-patterns Скилл для Spring Boot 3.x: доменные события, @TransactionalEventListener, Kafka и transactional outbox. Пригодится, когда синхронные вызовы между сервисами пора заменить на события. CX Codex +1 3 800установок chunking-strategy Помогает настроить нарезку текста для RAG-систем и векторных баз данных. Подбирает размер чанков от 256 до 1024 токенов и проверяет метрики извлечения. CX Codex +1 3 800установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой