Функциональность должна быть разбита на модули, объединенные по смыслу. Каждый модуль решает одну задачу и может быть легко переиспользован.
Названия функций должны четко отражать выполняемое действие, а переменные — содержимое.
- Используйте глаголы для функций и существительные для переменных.
- Не используйте аббревиатуры, за исключением общепринятых (например, id, API, URL).
Не дублируйте код. Если один и тот же блок используется несколько раз, выделите его в отдельную функцию или модуль.
Избегайте глубокой вложенности в условных операторах и операторах выбора: не более 2 уровней.
Обрабатывайте ошибки таким образом, чтобы не только логировать их, но и возвращать пользователю понятные и информативные сообщения.
Всегда задавайте типы для параметров и возвращаемых значений функций. Не используйте any, если этого можно избежать. Предпочитайте строгую типизацию и продуманное использование unknown.
Используйте интерфейсы или типы для сложных объектов и структур данных.
Следите за единообразием отступов, пробелов и других элементов форматирования. Используйте линтер ESLint и форматтер Prettier для поддержания консистентного стиля кода.
Соблюдайте конвенции REST при работе с эндпоинтами. В контроллерах Nest.js избегайте логики обработки данных; она должна находиться в сервисах.
Для перечислений и булевых значений используйте понятные и полные слова (например, isActive вместо act).
Логические значения не должны отрицаться более одного раза в выражении (!isActive вместо !!isInactive).
Для передачи данных между слоями используйте DTO. Описание DTO позволяет лучше структурировать входные данные и следить за их корректностью.
Используйте типы данных, подходящие для хранения нужной информации (например, timestamp для временных меток).
Всегда валидируйте и фильтруйте данные, поступающие в базу данных, особенно для полей, которые могут вводиться пользователями.