Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 14 additions & 1 deletion .cursor/rules/project-structure.mdc
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,13 @@ strive/
│ │ ├── app.component.spec.ts # Root tests
│ │ ├── app.config.ts # App configuration & providers
│ │ ├── app.routes.ts # Main routing
│ │ ├── interceptors/ # HTTP Interceptors
│ │ │ ├── index.ts # Public API exports
│ │ │ ├── auth.interceptor.ts # Authentication interceptor
│ │ │ ├── auth.interceptor.spec.ts # Auth interceptor tests
│ │ │ ├── token-refresh-manager.ts # Token refresh manager
│ │ │ ├── token-refresh-manager.spec.ts # Token manager tests
│ │ │ └── credentials.interceptor.ts # Credentials interceptor
│ │ └── layout/ # Layout components
│ │
│ ├── pages/ # Pages layer (FSD)
Expand Down Expand Up @@ -190,7 +197,13 @@ strive/
├── docs/ # Documentation
│ ├── DEPLOYMENT.md # Deployment guide
│ └── PWA-ICONS.md # PWA icons management guide
│ ├── PWA-ICONS.md # PWA icons management guide
│ └── plans/ # Development plans
│ ├── 005-feature-food-diary.md # Food diary feature plan
│ ├── 006-project-improvements-analysis.md # Project improvements analysis
│ ├── 007-auth-service-improvements.md # Auth service improvements plan
│ ├── 011-auth-ux-improvements.md # Auth UX improvements plan
│ └── 012-test-coverage-improvements.md # Test coverage improvements plan
├── scripts/ # Build and utility scripts
│ └── generate-pwa-icons.cjs # PWA icon generation script
Expand Down
58 changes: 58 additions & 0 deletions .cursor/rules/testing.mdc
Original file line number Diff line number Diff line change
Expand Up @@ -249,6 +249,64 @@ const mockServiceResponse: ServiceResponse = {
};
```

### Repeated Mock Objects Rule
**CRITICAL**: If the same mock object is used multiple times in tests, extract it to the main `describe` block and initialize in `beforeEach`.

#### ✅ Correct Pattern
```typescript
describe('ServiceName', () => {
let service: ServiceName;
let mockUser: User; // Extract repeated mock to describe level

beforeEach(() => {
// Initialize mock in beforeEach
mockUser = { id: '1', email: 'test@example.com', theme: 'light' };

configureZonelessTestingModule({
providers: [ServiceName],
});

service = TestBed.inject(ServiceName);
});

it('should work with user data', () => {
// Use mockUser directly - no const declaration needed
service.setUser(mockUser);
expect(service.getUser()).toEqual(mockUser);
});

it('should handle user updates', () => {
// Use same mockUser
service.updateUser(mockUser);
expect(service.user()).toEqual(mockUser);
});
});
```

#### ❌ Wrong Patterns
```typescript
// ❌ Wrong - repeating mock object in each test
it('should work with user data', () => {
const user: User = { id: '1', email: 'test@example.com', theme: 'light' };
service.setUser(user);
});

it('should handle user updates', () => {
const user: User = { id: '1', email: 'test@example.com', theme: 'light' }; // Duplication!
service.updateUser(user);
});

// ❌ Wrong - creating utility function for simple mocks
const createMockUser = () => ({ id: '1', email: 'test@example.com', theme: 'light' });
```

#### Benefits of This Pattern
- **DRY Principle**: No code duplication
- **Consistency**: Same mock data across all tests
- **Maintainability**: Change mock in one place
- **Readability**: Clear separation of setup and test logic
- **Performance**: No repeated object creation

### Spy Object Creation
```typescript
const serviceSpy = jasmine.createSpyObj('ServiceName', [
Expand Down
247 changes: 247 additions & 0 deletions docs/plans/007-auth-service-improvements.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,247 @@
# План улучшения AuthService

## 📊 Анализ текущего состояния

### 🔍 **Текущее использование localStorage/sessionStorage:**

#### localStorage (безопасно оставить):
- **`theme`** - выбранная пользователем тема (light/dark)
- **`calorie_calculation`** - данные расчета калорий (отправляются на backend)
- **`form_autosave_*`** - автосохранение форм (не чувствительные данные)

#### sessionStorage (безопасно оставить):
- **`return_url`** - URL для редиректа после логина

#### ❌ **Проблема**: Токены аутентификации НЕ хранятся в localStorage (хорошо!), но хранятся только в памяти

### 🎯 **Обновленные приоритеты:**
1. **UserStore** - централизованное состояние пользователя
2. **Error Handling** - улучшенная обработка ошибок
3. **UX Improvements** - loading states, remember me
4. **Architecture** - модульная структура

### ✅ Сильные стороны:
- Современный Angular подход (signals, standalone компоненты)
- Правильная архитектура с разделением ответственности
- Централизованная обработка ошибок
- JWT валидация с проверкой срока действия
- Автоматический refresh с предотвращением race conditions
- Интеграция с AuthGuard

### ❌ Проблемы и области для улучшения:

#### 1. Безопасность
- **✅ Хорошо**: HttpOnly cookies уже реализованы
- **✅ Хорошо**: Данные калорий отправляются на backend, localStorage для них безопасен
- **✅ Хорошо**: Токены не хранятся в localStorage

#### 2. Управление состоянием
- Нет централизованного состояния пользователя
- Отсутствует информация о пользователе (имя, email, роли)
- Нет персистентности состояния между сессиями
- Отсутствует кэширование пользовательских данных

#### 3. UX проблемы
- Нет индикации процесса аутентификации
- Отсутствует "запомнить меня" функциональность
- Нет обработки сетевых ошибок с retry
- Отсутствуют toast уведомления

#### 4. Архитектурные недостатки
- Смешивание логики в одном сервисе
- Отсутствует абстракция для разных типов аутентификации
- Нет поддержки refresh token rotation
- Сложно тестировать из-за тесной связанности

## 🎯 План улучшений (итеративный подход)

### **Итерация 1 (MVP) - Безопасность и состояние** ⏳ Ожидает

#### 1.1 Централизованное состояние пользователя
- **Задача**: Создать UserStore с signals
- **Детали**:
- Добавить информацию о пользователе (имя, email, роли)
- Реализовать персистентность состояния
- Добавить computed signals для производных данных
- **Результат**: Единое место управления состоянием пользователя
- **Время**: 3-4 часа

#### 1.2 Улучшенная обработка ошибок
- **Задача**: Добавить типизированные ошибки аутентификации
- **Детали**:
- Создать AuthError типы
- Реализовать retry механизм
- Добавить логирование ошибок
- **Результат**: Надежная обработка ошибок
- **Время**: 2-3 часа

### **Итерация 2 - UX и функциональность** ⏳ Ожидает

#### 2.1 "Запомнить меня" функциональность
- **Задача**: Добавить rememberMe опцию
- **Детали**:
- Реализовать долгосрочные токены
- Обновить UI для выбора опции
- Добавить настройки сессии
- **Результат**: Улучшенный UX для пользователей
- **Время**: 3-4 часа

#### 2.2 Улучшенная навигация
- **Задача**: Добавить breadcrumbs для аутентификации
- **Детали**:
- Реализовать deep linking после login
- Добавить redirect после logout
- Улучшить AuthGuard логику
- **Результат**: Интуитивная навигация
- **Время**: 2-3 часа

#### 2.3 Индикаторы состояния
- **Задача**: Добавить loading states для всех операций
- **Детали**:
- Реализовать progress indicators
- Добавить toast уведомления
- Создать skeleton loaders
- **Результат**: Понятная обратная связь для пользователя
- **Время**: 2-3 часа

### **Итерация 3 - Архитектура и расширяемость** ⏳ Ожидает

#### 3.1 Рефакторинг архитектуры
- **Задача**: Разделить AuthService на более мелкие сервисы
- **Детали**:
- Создать AuthStateService
- Добавить AuthConfigService
- Реализовать AuthTokenService
- **Результат**: Модульная и тестируемая архитектура
- **Время**: 4-5 часов

#### 3.2 Поддержка разных типов аутентификации
- **Задача**: Добавить OAuth2 поддержку
- **Детали**:
- Реализовать 2FA
- Добавить social login
- Создать абстракцию для провайдеров
- **Результат**: Гибкая система аутентификации
- **Время**: 6-8 часов

#### 3.3 Продвинутые функции безопасности
- **Задача**: Реализовать refresh token rotation
- **Детали**:
- Добавить device fingerprinting
- Реализовать session management
- Добавить audit logging
- **Результат**: Enterprise-level безопасность
- **Время**: 5-6 часов

### **Итерация 4 - Тестирование и документация** ⏳ Ожидает

#### 4.1 Комплексное тестирование
- **Задача**: Unit тесты для всех сервисов
- **Детали**:
- Integration тесты для auth flow
- E2E тесты для критических сценариев
- Performance тесты
- **Результат**: Надежная система с покрытием тестами
- **Время**: 4-5 часов

#### 4.2 Документация и мониторинг
- **Задача**: API документация
- **Детали**:
- Security guidelines
- Performance monitoring
- User guides
- **Результат**: Полная документация системы
- **Время**: 2-3 часа

## 📋 Детальный план первой итерации

### Этап 1: UserStore (3-4 часа)

#### 1.1 Создать UserStore
```typescript
// Создать UserStore с signals
// Добавить user information
// Реализовать persistence
```

#### 1.2 Обновить AuthService
```typescript
// Интегрировать с UserStore
// Обновить login/logout методы
// Добавить user data management
```

#### 1.3 Обновить компоненты
```typescript
// Обновить компоненты для использования UserStore
// Добавить user information display
// Обновить navigation logic
```

### Этап 2: Error Handling (2-3 часа)

#### 2.1 Создать AuthError типы
```typescript
// Создать типизированные ошибки
// Добавить error codes
// Реализовать error mapping
```

#### 2.2 Обновить error handling
```typescript
// Обновить AuthService error handling
// Добавить retry logic
// Реализовать error logging
```

#### 2.3 Обновить UI
```typescript
// Добавить error display
// Реализовать error recovery
// Обновить user feedback
```

## 🎯 Критерии успеха

### Итерация 1:
- [ ] UserStore содержит актуальную информацию о пользователе
- [ ] Ошибки обрабатываются gracefully с типизированными AuthError
- [ ] Все тесты проходят
- [ ] Покрытие тестами > 80%

### Итерация 2:
- [ ] "Запомнить меня" работает
- [ ] Навигация интуитивна
- [ ] Loading states отображаются
- [ ] Toast уведомления работают

### Итерация 3:
- [ ] Архитектура модульная
- [ ] OAuth2 интеграция работает
- [ ] Security features активны
- [ ] Performance оптимизирован

### Итерация 4:
- [ ] Покрытие тестами 100%
- [ ] Документация полная
- [ ] Мониторинг настроен
- [ ] Security audit пройден

## 📊 Оценка времени

- **Итерация 1**: 5-7 часов
- **Итерация 2**: 7-10 часов
- **Итерация 3**: 15-19 часов
- **Итерация 4**: 6-8 часов

**Общее время**: 33-44 часа

## 🚀 Готовность к реализации

- [x] План детализирован
- [x] Архитектура продумана
- [x] Технические решения определены
- [x] Критерии успеха установлены
- [x] Временные оценки даны

**Готов ли начать реализацию плана?**
Loading