Skip to main content

Common Structure

Стандарт структуры common/ директории в goLoot backend.

Назначение

backend/src/common/ — инфраструктурный код (cross-cutting concerns), который используется во всём приложении и не принадлежит конкретному домену.

Текущая структура

common/
├── constants/ # Глобальные константы
│ ├── auth.constants.ts
│ ├── config.ts
│ ├── database.constants.ts
│ ├── http.ts
│ ├── middleware.ts
│ ├── time.constants.ts
│ ├── two-factor.constants.ts
│ ├── url.constants.ts
│ ├── validation.ts
│ └── analytics.constants.ts
├── errors/ # Base error classes
│ └── AppError.ts
├── middleware/ # Fastify middlewares
│ ├── admin-auth.middleware.ts
│ ├── error-handler.ts
│ ├── rate-limits.middleware.ts
│ └── swagger-auth.middleware.ts
├── observability/ # Логирование, метрики, трейсинг
│ ├── logger.ts
│ ├── metrics.ts
│ ├── tracing.ts
│ ├── request-context.ts
│ ├── request-logger.hook.ts
│ ├── http-client.ts
│ ├── business-events.ts
│ └── metrics.routes.ts
├── schemas/ # Базовые схемы
│ └── base.schemas.ts # StandardResponses, Pagination
├── types/ # TypeScript типы
│ ├── fastify.d.ts
│ ├── fastify-logger.d.ts
│ ├── fastify-schema.d.ts
│ ├── jwt.types.ts
│ └── secrets.types.ts
└── utils/ # Утилиты общего назначения
├── analytics-counter.utils.ts
├── bigint-serializer.ts
├── chart-processor.ts
├── controller-utils.ts
├── date.utils.ts
├── env-validator.ts
├── error-handler.ts
├── file.utils.ts
├── secrets.service.ts
└── transaction-helper.ts

Что ДОЛЖНО быть в common/

ДиректорияСодержимоеПримеры
constants/HTTP статусы, лимиты, валидацияHTTP_STATUS, VALIDATION_PATTERNS
errors/Base error classesAppError
middleware/Fastify middlewaresadmin-auth, rate-limits, error-handler
types/Fastify types, JWT typesfastify.d.ts, jwt.types.ts
utils/Общие утилитыdate.utils, error-handler, transaction-helper
schemas/Базовые схемы ответовStandardResponses, Pagination
observability/Логирование, метрики (подробнее)logger, metrics, tracing

Что НЕ ДОЛЖНО быть в common/

ТипКуда переместить
Domain-specific schemasdomains/{domain}/schemas/
Domain-specific servicesdomains/{domain}/services/
Domain-specific constantsdomains/{domain}/constants/
Бизнес-логика (XP, calculations)Соответствующий домен

Правило определения принадлежности

Когда код относится к common/
  • Используется в 3+ доменах → возможно cross-cutting, рассмотреть common/
  • Используется в 2 доменах → один из них "владелец", переместить туда
  • Используется в 1 домене → переместить в домен

Пример:

  • date.utils.ts — используется везде → common/
  • telegram-validation.ts — только Telegram домен → domains/telegram/utils/
  • xp.service.ts — только Users домен → domains/users/services/