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