Files
sfera/registration-authorization-rules.md
Veronika Smirnova 8f7ec70fe6 Реализация реферальной системы и улучшение системы авторизации
- Добавлена полная реферальная система с GraphQL резолверами и UI компонентами
- Улучшена система регистрации с поддержкой ВКонтакте и реферальных ссылок
- Обновлена схема Prisma для поддержки реферальной системы
- Добавлены новые файлы документации правил системы
- Улучшена система партнерства и контрагентов
- Обновлены компоненты авторизации для поддержки новых функций
- Удален устаревший server.log

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-11 09:47:00 +03:00

10 KiB
Raw Blame History

ПРАВИЛА РЕГИСТРАЦИИ И АВТОРИЗАЦИИ

🏗️ АРХИТЕКТУРА СИСТЕМЫ

Основные сущности:

  • ПОЛЬЗОВАТЕЛЬ - верхний уровень, может иметь много номеров телефонов
  • НОМЕР ТЕЛЕФОНА - привязан к пользователю, может иметь много организаций
  • ОРГАНИЗАЦИЯ/КАБИНЕТ - бизнес-сущность, привязана к номеру телефона
  • ПАРТНЕРСТВО - связь между организациями (не пользователями или номерами)

Связи:

ПОЛЬЗОВАТЕЛЬ (1) ←→ (N) НОМЕРА ТЕЛЕФОНОВ (1) ←→ (N) ОРГАНИЗАЦИИ
ОРГАНИЗАЦИЯ (N) ←→ (N) ОРГАНИЗАЦИИ (партнерство)

Пример структуры:

ПОЛЬЗОВАТЕЛЬ "Иван Петров"
├── +7111111111 (номер 1)
│   ├── СБЕРБАНК (организация 1) 
│   └── АВИТО (организация 2)
└── +7222222222 (номер 2)
    └── ЯНДЕКС (организация 3)

📋 СПОСОБЫ СОЗДАНИЯ ОРГАНИЗАЦИЙ

1. СТАНДАРТНАЯ РЕГИСТРАЦИЯ

URL: /register (без параметров)

Флоу для НОВОГО номера телефона:

  1. Ввод телефона → SMS код → авторизация
  2. Выбор типа кабинета
  3. Ввод данных организации (ИНН или API ключи)
  4. Создание организации
  5. Привязка организации к номеру телефона

Флоу для АВТОРИЗОВАННОГО номера:

  1. Редирект в дашборд (стандартное поведение)

2. РЕГИСТРАЦИЯ ЧЕРЕЗ САЙДБАР (ПОТОМ)

Местоположение: Блок организации в сайдбаре

Флоу:

  1. Модалка создания новой организации
  2. Выбор типа кабинета
  3. Ввод данных организации
  4. Создание организации без партнерства

3. ПАРТНЕРСКАЯ ССЫЛКА

URL: /register?partner=CODE

Флоу для НОВОГО номера телефона:

  1. Ввод телефона → SMS код → авторизация
  2. Выбор типа кабинета
  3. Ввод данных организации
  4. Создание организации С ПАРТНЕРСТВОМ
  5. Автоматическое создание партнерских связей между организациями
  6. Начисление +100 сфер организации-рефереру

Флоу для АВТОРИЗОВАННОГО номера телефона:

  1. Пропуск авторизации (уже авторизован на этом номере)
  2. Переход сразу к выбору типа кабинета
  3. Ввод данных новой организации
  4. Создание организации С ПАРТНЕРСТВОМ
  5. Автоматическое создание партнерских связей
  6. Начисление +100 сфер организации-рефереру

4. РЕФЕРАЛЬНАЯ ССЫЛКА

URL: /register?ref=CODE

Флоу для НОВОГО номера телефона:

  1. Ввод телефона → SMS код → авторизация
  2. Выбор типа кабинета
  3. Ввод данных организации
  4. Создание организации С РЕФЕРАЛЬНОЙ СВЯЗЬЮ
  5. Начисление +100 сфер организации-рефереру
  6. БЕЗ автоматического партнерства

Флоу для АВТОРИЗОВАННОГО номера телефона:

  1. Пропуск авторизации (уже авторизован на этом номере)
  2. Переход сразу к выбору типа кабинета
  3. Ввод данных новой организации
  4. Создание организации С РЕФЕРАЛЬНОЙ СВЯЗЬЮ
  5. Начисление +100 сфер организации-рефереру
  6. БЕЗ автоматического партнерства

📊 ДАШБОРД РЕФЕРАЛОВ (РЕАЛИЗОВАНО)

Местоположение: /partners → вкладка "Рефералы"

Функции:

  1. Мои ссылки:

    • Реферальная ссылка: register?ref=CODE
    • Партнерская ссылка: register?partner=CODE
    • Кнопка копирования
  2. Статистика:

    • Всего партнеров и начисленных сфер
    • Статистика за текущий месяц
  3. Список рефералов:

    • Привлеченные организации
    • Фильтрация и поиск
    • Источник регистрации

🔧 ТЕХНИЧЕСКИЕ ПРАВИЛА

Валидация URL параметров:

  • Нельзя использовать partner и ref одновременно
  • Коды должны быть длиной 10 символов
  • Коды должны существовать в системе
  • Коды должны соответствовать формату [ABCDEFGHJKLMNPQRSTUVWXYZ23456789]{10}

Поведение AuthGuard:

  • Без кодов: если авторизован → дашборд, иначе → форма авторизации
  • С кодами: всегда показывать AuthFlow (даже для авторизованных)

Поведение AuthFlow:

  • Новый номер телефона: полный флоу (телефон → SMS → создание организации)
  • Авторизованный номер: пропустить телефон/SMS, сразу к созданию организации

Создание партнерства:

  • Создаются записи в таблице Counterparty в ОБЕ стороны
  • Создается ReferralTransaction с начислением сфер
  • Устанавливается referredById у новой организации

Создание реферальной связи:

  • Создается ReferralTransaction с начислением сфер
  • Устанавливается referredById у новой организации
  • БЕЗ создания Counterparty записей

⚠️ ВАЖНЫЕ ОГРАНИЧЕНИЯ

Архитектурные ограничения:

  • ОДИН ПОЛЬЗОВАТЕЛЬ может иметь МНОГО номеров телефонов
  • ОДИН НОМЕР ТЕЛЕФОНА привязан к ОДНОМУ ПОЛЬЗОВАТЕЛЮ
  • ОДИН НОМЕР ТЕЛЕФОНА может иметь МНОГО ОРГАНИЗАЦИЙ
  • Нельзя зарегистрировать один номер телефона дважды

Уникальность организаций:

  • Одна организация (по ИНН) может быть зарегистрирована только один раз
  • API ключи селлеров должны быть уникальными

Сохранение кодов:

  • Партнерские/реферальные коды должны передаваться через все компоненты
  • Коды не должны теряться при авторизации номера телефона
  • Коды применяются при создании ОРГАНИЗАЦИИ, не пользователя или номера

🧪 ТЕСТОВЫЕ СЦЕНАРИИ

Сценарий 1: Новый номер + партнерская ссылка

  1. Переход по register?partner=A2LA72BZZX
  2. Ввод нового телефона → SMS → авторизация
  3. Создание новой организации
  4. Проверка: создались партнерские связи, начислились сферы

Сценарий 2: Авторизованный номер + партнерская ссылка

  1. Уже авторизован на номере в системе
  2. Переход по register?partner=A2LA72BZZX
  3. Пропуск авторизации → сразу создание организации
  4. Проверка: создались партнерские связи, начислились сферы

Сценарий 3: Реферальная ссылка

  1. Переход по register?ref=A2LA72BZZX
  2. Авторизация (если нужно)
  3. Создание организации
  4. Проверка: начислились сферы, НЕТ партнерских связей

ВОПРОСЫ ДЛЯ СОГЛАСОВАНИЯ

  1. Архитектура БД: Нужна ли новая таблица для "мастер-пользователей" или изменить текущую схему?
  2. Связь пользователь-телефон: Как будет происходить связывание номеров телефонов с одним пользователем?
  3. UI для авторизованных: Показывать ли информацию "Вы создаете организацию для номера +7XXX"?
  4. Переключение организаций: Как пользователь выбирает активную организацию из разных номеров?
  5. Лимиты: Есть ли ограничения на количество номеров у пользователя или организаций у номера?
  6. Идентификация: Как система определяет, что два номера принадлежат одному пользователю?