Перейти к содержанию

Руководство для разработчиков и контрибьюторов

Обязательные правила при изменениях, затрагивающих персональные данные, согласия или публичные тексты.

1. Что нельзя нарушать

Требование Причина Проверка
Веб-аналитика только при konstructorium_analytics_consent === granted 152-ФЗ, политика cookie src/test/webAnalyticsTracker.test.js, ручной Network без batch до согласия
Регистрация без privacy_consent и terms_accepted → 400 Фиксация согласия tests/auth_service/test_legal_consent.py
Checkout без offer_accepted → 400 Оферта / ЗоЗПП tests/order_service/test_checkout_legal.py
Не логировать пароли, OTP, полные cookie в открытом виде Безопасность ПДн code review
Не коммитить реальные ПДн в тесты/дампы 152-ФЗ, CONTRIBUTING CI, ревью

2. Карта кода (источник истины для UI)

Подробнее о маршрутах и env: документация frontend.

Компонент / модуль Назначение
frontend/src/content/legal/ Тексты RU/EN для /legal/:slug
frontend/src/config/legalConfig.js Версия, оператор, LEGAL_CONSENT_VERSION
frontend/src/components/AnalyticsConsentBanner.jsx Баннер cookie/аналитики
frontend/src/services/webAnalyticsTracker.js page_view, batch, gating
frontend/src/components/AnalyticsRouteTracker.jsx SPA page views
Register.jsx, Cart.jsx, BecomeSeller.jsx, CreateProduct.jsx Чекбоксы согласия
ProfilePrivacySection.jsx Отзыв аналитики, запросы по ПДн
user_serviceUserLegalConsent, PersonalDataRequest Аудит согласий в БД
auth_service → регистрация + record_registration_legal_consent Согласие при signup
order_service → checkout + record_offer_acceptance Оферта при заказе
analytics_service Ingest /api/analytics/events/batch/, /consent/

3. Версионирование документов

При существенном изменении юридического текста:

  1. Обновить version и effectiveDate в модулях frontend/src/content/legal/ru/*.js и зеркале en/.
  2. Обновить соответствующий файл в docs/legal/*.md (см. document-sync.md).
  3. Увеличить VITE_LEGAL_DOCUMENT_VERSION (и задеплоить env).
  4. Учесть: уже зарегистрированные пользователи приняли старую версию — для критичных изменений может потребоваться повторный запрос согласия (отдельная задача продукта).

Константа для API: consent_version / offer_version передаётся с фронтенда как LEGAL_CONSENT_VERSION.

4. Переменные окружения (frontend)

VITE_LEGAL_OPERATOR_NAME=...
VITE_LEGAL_OPERATOR_EMAIL=...
VITE_LEGAL_OPERATOR_WEBSITE=...
VITE_PRIVACY_POLICY_URL=/legal/privacy
VITE_LEGAL_DOCUMENT_VERSION=2026-05-17

5. API (backend)

Endpoint Сервис Назначение
POST /api/register/ auth Поля privacy_consent, terms_accepted, consent_version
POST /api/.../checkout/ order offer_accepted, offer_version
POST /api/profiles/request_seller_status/ user seller_terms_accepted, seller_terms_version
POST /api/users/legal/data-request/ user access | delete | withdraw_analytics
POST /api/analytics/consent/ analytics Запись выбора баннера
POST /api/analytics/events/batch/ analytics События только с валидным visitor_id

6. Миграции

Юридические таблицы: user_service миграция 0006_legal_consent_models (user_legal_consent, user_personal_data_request).

При деплое migrate --noinput выполняется в команде запуска контейнера (см. docker-compose.prod.yml, CI run_smoke_migrations.sh).

7. Тесты перед merge

# Frontend
cd frontend && npm test -- --run src/content/legal/legalContent.test.js src/test/webAnalyticsTracker.test.js

# API (нужны поднятые сервисы или CI)
pytest tests/auth_service/test_legal_consent.py
pytest tests/order_service/test_checkout_legal.py
pytest tests/user_service/test_legal_smoke.py
pytest tests/analytics_service/test_smoke.py

8. Типичные ошибки в PR

  • Включить сторонний трекер (Google Analytics и т.п.) без обновления политики и баннера.
  • Отправлять аналитику до проверки isAnalyticsTrackingEnabled().
  • Хардкодить ИНН/адрес в коде вместо env и /legal/imprint.
  • Менять только docs или только SPA — расхождение текстов (см. document-sync.md).