# ПРАВИЛА РЕГИСТРАЦИИ И АВТОРИЗАЦИИ ## 🏗️ АРХИТЕКТУРА СИСТЕМЫ ### Основные сущности: - **ПОЛЬЗОВАТЕЛЬ** - верхний уровень, может иметь много номеров телефонов - **НОМЕР ТЕЛЕФОНА** - привязан к пользователю, может иметь много организаций - **ОРГАНИЗАЦИЯ/КАБИНЕТ** - бизнес-сущность, привязана к номеру телефона - **ПАРТНЕРСТВО** - связь между организациями (не пользователями или номерами) ### Связи: ``` ПОЛЬЗОВАТЕЛЬ (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. **Идентификация:** Как система определяет, что два номера принадлежат одному пользователю?