# 🎯 ПЛАН ИСПРАВЛЕНИЯ АРХИТЕКТУРЫ РОУТИНГА SFERA

> **Цель:** Исправить критическую ошибку архитектуры где регистрация происходит на `/dashboard`

---

## 🚨 ТЕКУЩАЯ ПРОБЛЕМА

### ❌ Что не работает:
- **Регистрация идет на `/dashboard`** - семантически неправильно
- **AuthGuard создает второй AuthFlow** на dashboard при незавершенной регистрации
- **Логическое противоречие:** dashboard = для авторизованных, но используется для регистрации
- **Пользователь запутывается** в flow регистрации

### 🔍 Корневая причина:
```
SMS верификация → токен есть → isAuthenticated: true
AuthContext → user: {...} НО user.organization: null  
AuthGuard → видит "незавершенная регистрация" → создает НОВЫЙ AuthFlow
Результат → сброс на step: "phone" вместо продолжения регистрации
```

---

## 🎯 ЦЕЛЕВАЯ АРХИТЕКТУРА

### ✅ Правильная структура URL:

| URL | Назначение | Пользователи | Компонент |
|-----|------------|--------------|-----------|
| `/` | Корневая страница (роутер) | Все | `app/page.tsx` - логика перенаправления |
| `/login` | Вход в систему | Неавторизованные | `AuthFlow` без параметров |
| `/register` | Регистрация | Неавторизованные + незавершенная регистрация | `AuthFlow` с поддержкой кодов |
| `/dashboard` | Панель управления | ✅ Авторизованные с организацией | `DashboardHome` через `AuthGuard` |

### 🔄 Логика перенаправлений:

```typescript
// app/page.tsx
if (isLoading) return <Loading />

if (user?.organization) {
  // Полностью авторизован → в dashboard
  router.replace('/dashboard')
} else if (user && !user.organization) {
  // Незавершенная регистрация → продолжить на /register
  router.replace('/register')
} else {
  // Не авторизован → на /login
  router.replace('/login')
}
```

---

## 📋 ДЕТАЛЬНЫЙ ПЛАН РЕАЛИЗАЦИИ

### **PHASE 1: ПОДГОТОВКА И АНАЛИЗ**

#### 1.1 Анализ текущих страниц авторизации
```bash
# Проверить содержимое:
- src/app/login/page.tsx
- src/app/register/page.tsx  
- src/app/dashboard/page.tsx
- src/components/auth-guard.tsx
```

#### 1.2 Анализ AuthFlow размещения
- Где сейчас рендерится AuthFlow
- Какие параметры принимает
- Как обрабатывает незавершенную регистрацию

#### 1.3 Проверка всех redirect/router.replace
```bash
# Найти все места перенаправлений
grep -r "router.replace\|redirect" src/
```

---

### **PHASE 2: СОЗДАНИЕ НОВОЙ АРХИТЕКТУРЫ**

#### 2.1 Исправить app/page.tsx (корневой роутер)
**БЫЛО:**
```typescript
if (user) {
  router.replace('/dashboard')  // Неправильно!
} else {
  router.replace('/login')
}
```

**БУДЕТ:**
```typescript
if (isLoading) return <LoadingSpinner />

if (user?.organization) {
  // Пользователь полностью зарегистрирован
  router.replace('/dashboard')
} else if (user && !user.organization) {
  // Пользователь авторизован, но регистрация не завершена
  router.replace('/register')
} else {
  // Пользователь не авторизован
  router.replace('/login')
}
```

#### 2.2 Исправить /dashboard/page.tsx
**БЫЛО:**
```typescript
<AuthGuard>  {/* Показывает AuthFlow при незавершенной регистрации */}
  <DashboardHome />
</AuthGuard>
```

**БУДЕТ:**
```typescript
<AuthGuard fallback={<RedirectToRegister />}>
  <DashboardHome />
</AuthGuard>
```

#### 2.3 Обновить /register/page.tsx
**Должен обрабатывать:**
- Новую регистрацию (нет токена)
- Незавершенную регистрацию (есть токен, нет организации)
- Параметры партнерских/реферальных кодов

#### 2.4 Обновить /login/page.tsx
**Только для входа** (без регистрации)

---

### **PHASE 3: ОБНОВЛЕНИЕ КОМПОНЕНТОВ**

#### 3.1 Создать RedirectToRegister компонент
```typescript
// components/auth/redirect-to-register.tsx
export function RedirectToRegister() {
  const router = useRouter()
  
  useEffect(() => {
    router.replace('/register')
  }, [])
  
  return <div>Перенаправление на регистрацию...</div>
}
```

#### 3.2 Обновить AuthGuard логику
- НЕ показывать AuthFlow на /dashboard
- Перенаправлять на /register при незавершенной регистрации
- Добавить проверку pathname

#### 3.3 Обновить AuthFlow состояния
- Правильно обрабатывать состояние при незавершенной регистрации
- Убрать конфликты между экземплярами AuthFlow

---

### **PHASE 4: ИСПРАВЛЕНИЕ AUTH-FLOW**

#### 4.1 Убрать window.location.href
**БЫЛО:**
```typescript
window.location.href = '/dashboard'
```

**БУДЕТ:**
```typescript
router.push('/dashboard')
```

#### 4.2 Исправить логику завершения регистрации
- После создания организации → redirect на `/dashboard`
- При ошибке → остаться на `/register`

#### 4.3 Обновить логику инициализации AuthFlow
- Определять текущий шаг на основе состояния пользователя
- Учитывать что пользователь может попасть на /register с токеном

---

## 🧪 ПЛАН ТЕСТИРОВАНИЯ

### **TEST CASE 1: Новый пользователь**
```
1. Открыть / → перенаправление на /login
2. Ввести телефон → SMS step
3. Ввести SMS → cabinet-select step  
4. Выбрать тип → inn/api step
5. Завершить → /dashboard
```

### **TEST CASE 2: Незавершенная регистрация**
```
1. Пользователь с токеном без организации
2. Открыть / → перенаправление на /register
3. AuthFlow определяет нужный шаг
4. Продолжить с правильного места
5. Завершить → /dashboard
```

### **TEST CASE 3: Авторизованный пользователь**
```
1. Пользователь с токеном и организацией
2. Открыть / → перенаправление на /dashboard
3. Открыть /register → перенаправление на /dashboard
4. Открыть /login → перенаправление на /dashboard
```

### **TEST CASE 4: Партнерские коды**
```
1. Открыть /register?partner=FF_123_456
2. AuthFlow получает partnerCode
3. Проходит регистрацию с партнерским кодом
4. Завершить → /dashboard
```

---

## ⚠️ КРИТИЧЕСКИЕ МОМЕНТЫ

### 🔒 Безопасность:
- `/dashboard` должен быть доступен ТОЛЬКО авторизованным с организацией
- AuthGuard НЕ должен показывать формы регистрации на защищенных страницах
- Проверить все места где используется AuthGuard

### 🔄 Обратная совместимость:
- Существующие ссылки на `/dashboard` должны работать
- Незавершенные регистрации не должны ломаться
- SMS коды и токены должны продолжать работать

### 📱 UX:
- Пользователь не должен видеть мерцания и перезагрузки
- Четкие состояния загрузки
- Понятные сообщения об ошибках

---

## 🛠️ ФАЙЛЫ ДЛЯ ИЗМЕНЕНИЯ

### Обязательные изменения:
- `src/app/page.tsx` - корневая логика роутинга
- `src/app/dashboard/page.tsx` - убрать AuthFlow fallback
- `src/app/register/page.tsx` - обработка незавершенной регистрации  
- `src/app/login/page.tsx` - только для входа
- `src/components/auth-guard.tsx` - новая логика перенаправлений
- `src/components/auth/auth-flow.tsx` - убрать window.location.href

### Новые компоненты:
- `src/components/auth/redirect-to-register.tsx` - компонент перенаправления

### Тестирование:
- Все flow регистрации
- Все типы пользователей
- Партнерские и реферальные коды

---

## 📊 КРИТЕРИИ УСПЕХА

✅ **Функциональные:**
- Новая регистрация проходит полностью
- Незавершенная регистрация продолжается с нужного шага
- Авторизованные пользователи попадают в dashboard
- Партнерские коды работают

✅ **Технические:**
- Нет создания второго AuthFlow
- Нет бесконечных перенаправлений  
- ESLint и TypeScript без ошибок
- Приложение собирается

✅ **UX:**
- Логичные URL для пользователей
- Никаких неожиданных сбросов формы
- Плавные переходы между шагами

---

## 🚀 ГОТОВНОСТЬ К РЕАЛИЗАЦИИ

План детально проработан. Готов к пошаговой реализации:

1. ✅ Анализ проблемы завершен
2. ✅ Архитектура спроектирована  
3. ✅ План реализации детализирован
4. ✅ Тест-кейсы подготовлены
5. ✅ Критерии успеха определены

**Следующий шаг:** Начать PHASE 1 - Подготовка и анализ