Локальная разработка
Пакетный менеджер: npm · Задачи: Nx · Node 22
Установка
Заголовок раздела «Установка»npm cinpx prisma generate --schema=./apps/core-api/prisma/schema.prismaНужен доступ к PostgreSQL, а для части сервисов — Redis / RabbitMQ / S3 / SMTP. Заполни .env (см. environment).
Запуск сервисов (dev)
Заголовок раздела «Запуск сервисов (dev)»В package.json есть шорткаты; в общем случае — через Nx:
# через npm-скриптыnpm run dev:auth-apinpm run dev:user-api
# напрямую через Nx (любой сервис)npx nx serve auth-apinpx nx serve user-apinpx nx serve project-apinpx nx serve admin-apinpx nx serve ai-agent-servicenx serve использует конфигурацию development (см. apps/<name>/project.json).
Сборка (prod-бандл)
Заголовок раздела «Сборка (prod-бандл)»npm run build:auth-api # или: npx nx build <name>Результат — dist/apps/<name>/main.js (запускается через node/pm2-runtime).
База данных (Prisma)
Заголовок раздела «База данных (Prisma)»Все команды — с явным путём к схеме:
# сгенерировать клиентnpx prisma generate --schema=./apps/core-api/prisma/schema.prisma
# применить миграции (dev)npx prisma migrate dev --schema=./apps/core-api/prisma/schema.prisma
# применить миграции (prod)npx prisma migrate deploy --schema=./apps/core-api/prisma/schema.prisma
# посмотреть данныеnpx prisma studio --schema=./apps/core-api/prisma/schema.prismaСиды (apps/core-api/prisma/seeds/) — см. seeds.
Тесты и линтинг
Заголовок раздела «Тесты и линтинг»npx nx test <project> # unit-тесты (jest), *.spec.tsnpx nx lint <project> # eslint + границы модулей Nxnpx nx run-many -t test # все проектыe2e-проекты
apps/*-e2eисключены из инференса jest-таргета (см.nx.json). Многие unit-таргеты настроеныpassWithNoTests.
Тесты по настоящей базе
Заголовок раздела «Тесты по настоящей базе»Инварианты схемы, констрейнты и guard’ы авторизации проверяются не моками, а живой PostgreSQL:
для этого в корне лежит docker-compose.test.yml — отдельный контейнер на порту 55432,
с данными в tmpfs (контейнер поднят заново = чистая база).
npm run test:db:up # поднять тестовую БД и дождаться healthchecknpx nx run core-api-e2e:integration # инварианты схемы: Restrict, CHECK, частичные индексы, сидыnpx nx run admin-api-e2e:integration # платформенные роли и админ-поверхность команд по HTTPnpx nx run user-api-e2e:integration # команды: доступ, жизненный цикл, приглашения, гонкиnpm run test:db:down # остановить и снести томСтрока подключения берётся из POSTGRES_URL, а при её отсутствии — из дефолта в
apps/*-e2e/src/support/integration-db.ts. Если база не поднята, прогон падает с прямым
указанием запустить npm run test:db:up, а не с ECONNREFUSED.
Таргет
integrationнамеренно не входит вnx affected -t lint,test,build: обычный прогон не должен требовать Docker. Гонять его нужно отдельно — и обязательно перед сдачей работы, которая трогает схему, миграции или авторизацию.
Перед прогоном база должна содержать актуальный baseline и сиды:
export POSTGRES_URL="postgresql://crewsforge:crewsforge@localhost:55432/crewsforge_test"npx prisma migrate deploy --schema=./apps/core-api/prisma/schema.prismaAPP_ENV=development npx nx run core-api:prisma:seed:run⚠️
apps/core-api/.env.developmentуказывает на удалённую базу.nx run core-api:prisma:seed:runбез явно экспортированногоPOSTGRES_URLзасеет её, а не локальную.
Полезные команды Nx
Заголовок раздела «Полезные команды Nx»npx nx graph # граф зависимостей проектовnpx nx show project <name> # доступные таргеты проектаnpx nx affected -t build # собрать только затронутые изменениями проектыСоответствие имён
Заголовок раздела «Соответствие имён»Имя проекта Nx = последний сегмент пути. Приложения: auth-api, user-api, project-api, admin-api, ai-agent-service, core-api. Библиотеки импортируются по алиасам @crewsforge-back/... (см. conventions).