NestJS + GraphQL API для платформы NPPWEB. Сервис хранит пользователей, сессии, источники, source runs, закупки и отчёты, а также принимает ingest от processing-worker.
Минимально нужны переменные:
DATABASE_URLREDIS_URLRABBITMQ_URLJWT_ACCESS_SECRETINGEST_API_TOKEN
Готовый пример окружения удобнее брать из infra/.env.example.
Поднять зависимости через Docker:
cd ../infra
cp .env.example .env
docker compose --env-file .env -f docker-compose.yml -f docker-compose.apps.yml up -d postgres redis rabbitmq minio minio-initЗапустить backend:
cd ../npp-backend
npm install
npm run db:setup
npm run start:devEndpoints по умолчанию:
- health:
http://localhost:3000/api/health - ready:
http://localhost:3000/api/health/ready - GraphQL:
http://localhost:3000/graphql
Seed идемпотентный и безопасно запускается повторно.
- admin:
admin@admin.ru / 12345678 - analyst:
analyst@admin.ru / 12345678 - user:
user@admin.ru / 12345678
npm run prisma:generate
npm run prisma:migrate:deploy
npm run prisma:db:seedloginвыдаётaccessTokenиrefreshToken.refreshSessionперевыпускает пару токенов и ревокает старую refresh-сессию.logoutзавершает текущую server-side сессию.accessTokenпривязан кUserSession, поэтому после logout он становится невалидным по серверной логике.
Пример login:
mutation {
login(input: { email: "admin@admin.ru", password: "12345678" }) {
accessToken
refreshToken
expiresInSeconds
user {
email
role
}
}
}processing-worker вызывает mutation ingestNormalizedItem.
- JWT для ingest не нужен.
- обязательная авторизация идёт через заголовок
x-ingest-token. x-ingest-tokenдолжен совпадать сINGEST_API_TOKEN.
npm run check
npm run test
npm run build