NestJS
Для чего модуль
Освоить NestJS как платформу для устойчивых backend-сервисов: чистая модульность, управляемые зависимости, предсказуемые контракты и надежная эксплуатация.
Результат после прохождения
- Вы проектируете модули и DI-граф без хаоса и циклических зависимостей.
- Вы строите API-слой с понятными контрактами, валидацией и error-handling.
- Вы внедряете security и reliability-паттерны на уровне framework.
- Вы умеете тестировать Nest-сервисы от unit до e2e.
Термины и аббревиатуры
| Термин | Коротко |
|---|---|
DI | Внедрение зависимостей |
Module | Единица организации фич |
Provider | Инжектируемая зависимость |
DTO | Контракт данных API |
Guard | Проверка доступа |
Фокус по грейдам
Junior: понимать базовые механики и объяснять их простыми примерами.Middle: применять тему в продуктовых сценариях с учетом рисков и ограничений.Senior: управлять архитектурными trade-offs, метриками и эволюцией решения.
Как работать с модулем
- Берите один доменный сервис (например, orders/payments/users) и ведите его через все уроки.
- Для каждого решения фиксируйте: риск, компромисс, метрику проверки.
- По итогам урока добавляйте артефакт: схема модулей, контракт ошибок, тестовый набор.
Программа модуля
Урок 1. Модули и DI
Цель: построить архитектуру Nest-сервиса с прозрачными зависимостями и ownership.
Модульные границы
- Feature modules для доменных зон.
- Shared/infrastructure modules с минимальным публичным API.
- Явные зависимости между модулями, без «скрытых shortcuts».
DI как инструмент архитектуры
- Провайдеры описывают контракты, а не concrete реализации.
- Tokens/interfaces помогают изолировать domain от infra.
- Избегайте циклических зависимостей;
forwardRef— исключение, а не стратегия.
Где ломается в проде
- Один «God module» для всего приложения.
- Сервисы связаны напрямую и трудно тестируются.
- Глобальные провайдеры растут без контроля.
Мини-задача (обязательная)
Нарисуйте модульную схему вашего сервиса: модули, провайдеры, зависимости, ownership. Отдельно отметьте потенциальные циклы и план устранения.
Что спросит интервьюер: как вы предотвращаете деградацию архитектуры Nest при росте проекта.
Критерий готовности по уроку: вы можете объяснить DI-граф и модульные границы так, чтобы новый разработчик быстро вошел в проект.
Урок 2. API слой и контракты
Цель: сделать внешнее поведение API предсказуемым и устойчивым к изменениям.
Controllers, Pipes, Validation
- Controller только orchestration, бизнес-логика в service/use-case.
- DTO и валидация входа обязательны на boundary.
- Transform/validation pipeline должен быть единообразным по сервису.
Error handling
- Бизнес- и инфраструктурные ошибки разделены.
- Единый error contract (
code,message,traceId,context). - Exception filters для консистентного response format.
Где ломается в проде
- Разные endpoint возвращают разные форматы ошибок.
- Валидация частично в DTO, частично «где-то внутри сервиса».
- Контракт API меняется без deprecation процесса.
Мини-задача (обязательная)
Соберите API contract для 5 типовых ошибок и добавьте пример валидации DTO + mapping в единый error response.
Что спросит интервьюер: как вы отделяете transport-слой от доменной логики в Nest.
Критерий готовности по уроку: вы можете показать API-слой, где ошибки и валидация стандартизированы на уровне всей системы.
Урок 3. Безопасность и доступ
Цель: встроить безопасность в архитектуру сервиса, а не добавлять после инцидента.
Guards и authorization
- AuthN/AuthZ проверяются централизованно.
- Роли и политики доступа отражены в коде прозрачно.
- Критичные операции имеют audit trail.
Interceptors и observability
- Correlation id / trace id проходит через весь запрос.
- Логирование структурированное и безопасное (без секретов).
- Метрики по latency/error rate на уровне endpoint.
Где ломается в проде
- Бизнес-проверки прав размазаны по сервисам.
- Security-логика дублируется и расходится.
- Отсутствует наблюдаемость за критичными действиями.
Мини-задача (обязательная)
Опишите схему защиты для критичного endpoint: аутентификация, авторизация, audit logging, rate limit, error mapping.
Что спросит интервьюер: где в Nest лучше внедрять контроль доступа и почему.
Критерий готовности по уроку: вы можете показать security-контур сервиса и объяснить, какие риски он закрывает.
Урок 4. Надежность и тестирование
Цель: обеспечить предсказуемое качество сервиса при изменениях и релизах.
Уровни тестов
- Unit для бизнес-логики и use-cases.
- Integration для модульных взаимодействий и инфраструктурных границ.
- E2E для критичных сквозных сценариев.
Testability by design
- DI облегчает изоляцию зависимостей.
- Контракты сервисов упрощают мокирование/подмену.
- Тесты покрывают поведение, а не framework internals.
Где ломается в проде
- Тестируют только happy-path.
- E2E-слой нестабилен и игнорируется.
- Нет release-gate по критичным сценариям.
Мини-задача (обязательная)
Покройте один бизнес-flow тремя слоями тестов: unit, integration, e2e. Добавьте негативный сценарий и проверку error contract.
Что спросит интервьюер: как вы строите тестовую стратегию для Nest-сервиса под реальные риски.
Критерий готовности по уроку: вы можете доказать надежность сервиса через тестовую систему и эксплуатационные сигналы.
Практика
1. Module boundaries и dependency graph
Связка: Nest q-1..q-3, Nest q-10, Nest q-17.
Что сделать:
- Нарисуйте module map для сервиса
orders:module -> providers -> imports/exports -> owner -> public contract. - Отдельно покажите, где живет controller, use-case/service, repository/adapter, DTO и domain error.
- Найдите один потенциальный circular dependency и предложите boundary fix: facade, domain event, port/interface или shared contract.
Артефакт: Nest module ownership map + dependency-cycle fix note.
Критерий готовности: вы объясняете Nest-архитектуру через границы и направление зависимостей, а не через список декораторов.
2. DTO validation и unified error contract
Связка: Nest q-4, Nest q-5..q-6, Nest q-19.
Что сделать:
- Подготовьте DTO validation для
POST /ordersили похожего endpoint. - Составьте error contract для validation, auth, domain conflict, dependency timeout и unknown error.
- Покажите mapping:
raw exception/domain error -> public error code -> HTTP meaning -> safe message -> requestId -> UI action.
Артефакт: DTO validation sample + error mapping table.
Критерий готовности: вы отделяете transport validation, domain rule и public error response, не отдавая raw exception наружу.
3. Security contour for critical endpoint
Связка: Nest q-7, Node q-9, Node q-14, Senior q-11.
Что сделать:
- Для endpoint
POST /payments/confirmилиPOST /orders/:id/cancelопишите AuthN, AuthZ, policy owner, rate limit, audit log и idempotency. - Заполните security matrix:
risk -> guard/policy -> server check -> audit event -> test -> failure response. - Добавьте negative paths: no token, expired token, wrong owner, duplicate request, suspicious retry, missing permission.
Артефакт: critical endpoint security matrix.
Критерий готовности: вы показываете, где в Nest внедрять контроль доступа и какие риски закрывает каждый слой.
4. Testing strategy и release gate
Связка: Nest q-12, Nest q-14, Senior q-16..q-17.
Что сделать:
- Покройте один business flow тремя слоями: unit, integration, e2e.
- Заполните risk-to-test matrix:
risk -> unit -> integration -> e2e -> observability/release gate. - Добавьте минимум один negative path, один auth/permission path, один error contract assertion и один rollback signal.
Артефакт: risk-to-test matrix + release gate checklist.
Критерий готовности: вы доказываете надежность сервиса через тесты и эксплуатационные сигналы, а не через "покрытие ради покрытия".
Связь с треками и вопросами
- Architecture boundaries: Nest q-1..q-3, Nest q-10, Nest q-17.
- API and errors: Nest q-4..q-6, Nest q-19.
- Security and operations: Nest q-7, Nest q-14, Node q-9, Node q-14.
- Persistence and reliability continuation: Nest q-11..q-13, Nest q-16, Databases q-6, Databases q-15.
- SQL practice continuation: Клиенты без потери нулевых заказов, Города с выручкой выше порога, Следующая страница заказов.
- Повторение: через 24 часа пересоберите module map, transaction checklist and risk-to-test matrix без подсказок.
Критерий готовности
Ready: вы объясняете Nest-архитектуру через границы, контракты, безопасность, тестируемость и надежность.
Partial: вы знаете decorators/providers/guards, но не можете показать ownership map, error mapping или risk-based test plan.
Not ready: вы описываете Nest как "controller-service-module" без contract boundaries, auth policy, observability и negative paths.
Артефакты после модуля
- Nest module ownership map.
- Dependency-cycle fix note.
- DTO validation sample + error mapping table.
- Critical endpoint security matrix.
- Risk-to-test matrix.
- Release gate checklist для критичного flow.
- Repository transaction checklist: use-case, DB writes, external calls, outbox/queue, rollback test.
- Cache/observability map: cache key, invalidation event, DB query span, alert threshold.
Куда дальше
- Базы данных: углубить transaction, idempotency, migration and cache consistency.
- SQL-песочница: проверить join/cardinality перед проектированием repository.
- Мост практики: Backend data-access integration: пройти ORM/query-builder decision, N+1 diagnosis и repository transaction boundary.
- Tooling и Delivery
- NestJS