
- Добавлена полная реферальная система с GraphQL резолверами и UI компонентами - Улучшена система регистрации с поддержкой ВКонтакте и реферальных ссылок - Обновлена схема Prisma для поддержки реферальной системы - Добавлены новые файлы документации правил системы - Улучшена система партнерства и контрагентов - Обновлены компоненты авторизации для поддержки новых функций - Удален устаревший server.log 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
178 lines
10 KiB
Markdown
178 lines
10 KiB
Markdown
# ПРАВИЛА РЕГИСТРАЦИИ И АВТОРИЗАЦИИ
|
||
|
||
## 🏗️ АРХИТЕКТУРА СИСТЕМЫ
|
||
|
||
### Основные сущности:
|
||
- **ПОЛЬЗОВАТЕЛЬ** - верхний уровень, может иметь много номеров телефонов
|
||
- **НОМЕР ТЕЛЕФОНА** - привязан к пользователю, может иметь много организаций
|
||
- **ОРГАНИЗАЦИЯ/КАБИНЕТ** - бизнес-сущность, привязана к номеру телефона
|
||
- **ПАРТНЕРСТВО** - связь между организациями (не пользователями или номерами)
|
||
|
||
### Связи:
|
||
```
|
||
ПОЛЬЗОВАТЕЛЬ (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. **Идентификация:** Как система определяет, что два номера принадлежат одному пользователю? |