Реализация реферальной системы и улучшение системы авторизации

- Добавлена полная реферальная система с 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:
Veronika Smirnova
2025-08-11 09:47:00 +03:00
parent af16402f22
commit 8f7ec70fe6
28 changed files with 5827 additions and 4313 deletions

View 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. **Идентификация:** Как система определяет, что два номера принадлежат одному пользователю?