Skip to content

Карта репозиториев

Этот раздел нужен как техническая карта ownership по всей экосистеме NPPWEB: что за что отвечает, от чего зависит и куда идти при изменениях.

Общая карта

РепозиторийТехнологииОсновная ответственность
infraDocker Compose, Makeзапуск и deploy-контур
contractsGraphQL SDL, JSON Schemasource of truth по API и событиям
scrape-helperNode.js, Pino, Undiciсбор данных, source runs, артефакты
processing-workerNode.js workerнормализация, ingest, retry/DLQ
npp-backendNestJS, GraphQL, Prismaдоменная модель, auth, отчёты, аналитика
npp-webNuxt 3, Tailwind, Apolloпользовательский кабинет и аналитические экраны

Как читать систему

Если смотреть сверху вниз, поток такой:

  1. infra поднимает среду.
  2. scrape-helper собирает данные и публикует raw-события.
  3. processing-worker приводит их к общей форме.
  4. npp-backend хранит доменные сущности и агрегаты.
  5. npp-web показывает результат через GraphQL.
  6. contracts связывает несколько репозиториев едиными схемами.

Какие зависимости самые важные

РепозиторийОт чего зависитЧто отдаёт другим
infraDockerfiles, env, compose-конфигурацияединый runtime-контур
contractsсогласованные изменения API и событийстабильные контракты
scrape-helperRabbitMQ, MinIO, proxy, contractssource.raw.v1, артефакты, SourceRun статусы
processing-workerRabbitMQ, backend ingest, contractsnormalized ingest и source.normalized.v1
npp-backendPostgres, Redis, ingest, runtime scraperGraphQL API, отчёты, analytics summary
npp-webGraphQL API, Nuxt runtimeинтерфейс платформы

Куда идти при изменениях

ИзменениеС чего начинать
новый внешний источникscrape-helper
изменился HTML/API площадкиscrape-helper
новое поле в raw/normalized payloadcontracts, потом worker/backend
новая доменная сущность или ingest-потокnpp-backend
новый аналитический показательnpp-backend, затем npp-web
новый экран или представлениеnpp-web
новый env или runtime-serviceinfra
изменение GraphQLcontracts + npp-backend + npp-web

Как не запутаться в ownership

scrape-helper и processing-worker — это не одно и то же

  • scrape-helper знает внешний источник;
  • processing-worker знает нормализованный смысл данных;
  • npp-backend знает бизнес-модель;
  • npp-web знает пользовательский сценарий.

Если смешать эти уровни, будет трудно поддерживать платформу при любом изменении площадки.

contracts — это не “вспомогательный” репозиторий

Он важен тем, что:

  • не даёт backend и frontend разъехаться по GraphQL;
  • фиксирует форму raw и normalized событий;
  • помогает ревьюить cross-repo изменения как осознанную эволюцию контракта.

infra — это часть продукта, а не только dev tooling

Потому что именно там живут:

  • реальные env-дефолты;
  • compose-зависимости;
  • proxy-контур;
  • условия устойчивого старта сервисов.

Во многих инцидентах причина находится именно в infra, а не в приложении.

Рекомендуемый порядок изучения

Если вы новый участник проекта, удобнее идти так:

  1. Быстрый старт
  2. Архитектура
  3. Аналитический контур
  4. infra
  5. scrape-helper
  6. processing-worker
  7. npp-backend
  8. npp-web
  9. contracts

Типичные ошибки новых участников

  • менять GraphQL только на frontend или только на backend;
  • считать, что успешный SourceRun гарантирует наполненную аналитику;
  • чинить backend, когда фактическая проблема в proxy или внешней площадке;
  • пытаться записывать бизнес-сущности прямо из парсера;
  • не обновлять docs после важных архитектурных решений.

Что читать дальше

Техническая и аналитическая документация платформы NPPWEB.