Перейти к основному содержимому

Правила Monorepo

Целевая Структура

Pin/
docs/
src/
services/
gateway/
front-ends/
contracts/
shared/
building-blocks/
deploy/
scripts/

Политика Import И Reference

  • src/services/identity не может ссылаться на src/services/accounting, и наоборот.
  • Синхронные межсервисные вызовы идут через typed HTTP/gRPC clients, описанные как ports и реализованные infrastructure adapters.
  • Асинхронная коммуникация идет через event contracts в src/contracts, пока contracts не опубликованы как NuGet packages.
  • Common primitives живут в src/shared или src/building-blocks.
  • Frontend apps не импортируют service internals; они используют gateway OpenAPI clients или shared API packages, сгенерированные из gateway contracts.

Shared Packages

  • Talent.Common.Domain: ids, entity base types, value object base types, domain events.
  • Talent.Common.Application: command/query abstractions, result mapping, validation pipeline.
  • Talent.Common.Infrastructure: EF helpers, transaction boundaries, MassTransit integration helpers, idempotency, distributed locks, options validation.
  • Talent.Common.Observability: correlation middleware, tracing enrichers, logging scopes, metrics naming helpers, Sentry scrubbing.
  • Pin.Contracts.*: versioned event contracts per bounded context.

Docker Compose

  • Infrastructure compose запускает только platform dependencies.
  • Service compose запускает api, migrator, background.
  • .bat launcher использует явное имя проекта: docker compose -p Pin-accounting up --build --parallel.
  • Launcher валидирует .env, compose file и health containers.

Дисциплина Документации

  • Любой новый сервис требует service spec, API outline, event outline и ADR, если появляется новая технология или cross-service pattern.
  • Любое изменение event требует versioning notes в docs/09-events/event-contracts.md.
  • Любое изменение схемы денег, identity, KYC, provider callbacks или partner payouts требует migration notes и rollback notes.
  • Вся документация пишется на русском UTF-8.
  • Большие документы дробятся согласно правилам документации.
  • Любая новая операция описывает observability, transaction boundary, side effects, state transitions, idempotency и DoR/DoD.
  • Запрещены размытые постановки без конкретных полей, permissions, статусов, событий и ошибок.
  • Общие инфраструктурные механизмы документируются в Shared/Common Infrastructure один раз. Service docs ссылаются на них и не копируют описание таблиц/полей.
  • Для Inbox/Outbox используется MassTransit; custom service-specific OutboxMessage/InboxMessage сущности запрещены.