mnemo_cards/mnemo_cards_web_v2/README.md

450 lines
18 KiB
Markdown
Raw Permalink Normal View History

2025-11-10 23:55:41 +00:00
# mnemo_cards_web_v2
Flutter web приложение для изучения языков с использованием **yx_scope** и **yx_state**.
2025-12-14 19:21:36 +00:00
[![Version](https://img.shields.io/badge/version-1.0.12+13-blue.svg)](pubspec.yaml)
[![Flutter](https://img.shields.io/badge/Flutter-3.9.2+-02569B?logo=flutter)](https://flutter.dev)
[![Platform](https://img.shields.io/badge/platform-Web-orange.svg)](https://flutter.dev/web)
> 🌐 **Важно**: Этот проект предназначен ТОЛЬКО для web платформы и работает на удаленном сервере.
## 📖 Содержание
- [Описание](#-описание)
- [Быстрый старт](#-быстрый-старт)
- [Архитектура](#-архитектура)
- [Функциональность](#-функциональность)
- [Технологии](#-технологии)
- [Структура проекта](#-структура-проекта)
- [Разработка](#-разработка)
- [Тестирование](#-тестирование)
- [Деплой](#-деплой)
- [Дополнительная документация](#-дополнительная-документация)
## 🎯 Описание
**mnemo_cards_web_v2** — это современное веб-приложение для изучения иностранных языков, портированное с мобильной версии. Приложение использует карточки (flashcards), мини-игры и систему достижений для эффективного запоминания слов и фраз.
2025-11-10 23:55:41 +00:00
2025-12-14 19:21:36 +00:00
### Ключевые особенности:
- 🎮 Интерактивные игры для запоминания слов
- 📊 Детальная статистика прогресса
- 🎴 Система карточек с озвучкой
- 🌓 Светлая и темная тема
- 🔐 Авторизация через Google и Telegram
- 👤 Гостевой режим
- 💰 Система покупок и подписок
- 🏆 Достижения и задания
- 💬 Встроенный чат
2025-11-10 23:55:41 +00:00
2025-12-14 19:21:36 +00:00
## ⚡ Быстрый старт
2025-11-10 23:55:41 +00:00
2025-12-14 19:21:36 +00:00
### Требования
- Flutter SDK 3.9.2+
- Dart SDK 3.9.2+
- Chrome (для запуска в режиме разработки)
- Backend сервер (см. [mnemo_cards_backend](../mnemo_cards_backend))
### Установка
2025-11-10 23:55:41 +00:00
```bash
2025-12-14 19:21:36 +00:00
# 1. Установите зависимости
2025-11-10 23:55:41 +00:00
flutter pub get
2025-12-14 19:21:36 +00:00
# 2. Сгенерируйте код (freezed, json_serializable)
flutter pub run build_runner build --delete-conflicting-outputs
# 3. Запустите приложение в Chrome
flutter run -d chrome
```
Полная инструкция: [QUICK_START.md](./QUICK_START.md)
## 🏗️ Архитектура
Приложение построено на базе **Clean Architecture** с использованием **yx_scope** для Dependency Injection и **yx_state** для управления состоянием.
### Скоупы (Dependency Injection)
#### 🌐 AppScope
Корневой скоуп, живет все время работы приложения:
- **Router** (`GoRouter`) — навигация и роутинг
- **Analytics** (`FirebaseAnalytics`) — аналитика событий
- **Auth** (`AuthService`) — авторизация через Google/Telegram
- **Storage** (`SharedPreferences`) — локальное хранилище
#### 👤 UserScope
Пользовательский скоуп, создается при запуске (для гостя или авторизованного пользователя):
- **Packs** — управление темами и карточками
- **Games** — игровая логика
- **Statistics** — статистика прогресса
- **Profile** — профиль пользователя
- **Purchases** — покупки и подписки
- **Tasks** — система заданий
- **Favorites** — избранные карточки
- **Chat** — чат-модуль
> 💡 **Примечание**: UserScope создается сразу при запуске и НЕ удаляется при logout, только меняется состояние.
### State Management (yx_state)
Все состояние приложения управляется через State Managers:
| State Manager | Назначение |
|--------------|-----------|
| `ThemeStateManager` | Управление темой (светлая/темная) |
| `UserStateManager` | Состояние пользователя (гость/авторизован) |
| `PacksStateManager` | Загрузка и управление темами/карточками |
| `GamesStateManager` | Состояние активных игр |
| `StatisticsStateManager` | Статистика и прогресс |
| `ProfileStateManager` | Данные профиля |
| `PurchaseStateManager` | Покупки и подписки |
| `TasksStateManager` | Задания пользователя |
| `FavoritesStateManager` | Избранные карточки |
## ✨ Функциональность
### Реализовано ✅
- 🔐 Авторизация через Google и Telegram
- 👤 Гостевой режим с ограниченным функционалом
- 📚 Просмотр и изучение тем (паков)
- 🎮 Мини-игры для запоминания:
- Сопоставление (Match)
- Ввод букв (Input Letters)
- Выбор ответа (Multiple Choice)
- Матрица слов (Matrix)
- 🎴 Карточки с перелистыванием (Card Flipper)
- 🔊 Озвучка карточек (Text-to-Speech)
- 📊 Детальная статистика:
- График прогресса
- Статистика по словам
- Достижения
- История изучения
- 🌓 Переключение темы (светлая/темная)
- 💰 Система покупок и подписок
- 🏆 Система заданий и достижений
- 💬 Встроенный чат
- 📱 Адаптивный дизайн
### В разработке 🚧
- 📈 Расширенная аналитика
- 🔄 Синхронизация между устройствами
- 🎯 Персонализированные рекомендации
- 🗣️ Дополнительные типы игр
## 🛠 Технологии
### Core
- **Flutter 3.9.2+** — UI фреймворк
- **Dart 3.9.2+** — язык программирования
### Architecture & State Management
- **yx_scope** (1.1.2) — Dependency Injection
- **yx_state** (1.0.0) — State Management
- **go_router** (14.2.0) — Роутинг и навигация
### Backend Integration
- **dio** (5.3.3) — HTTP клиент
- Custom API client для backend
### Firebase
- **firebase_core** (3.3.0) — Core Firebase
- **firebase_auth** (5.3.1) — Авторизация
- **firebase_analytics** (11.2.1) — Аналитика
- **firebase_crashlytics** (4.0.4) — Отчеты о сбоях
- **firebase_remote_config** (5.4.7) — Удаленная конфигурация
### Code Generation
- **freezed** (3.2.3) — Immutable классы и unions
- **json_serializable** (6.8.0) — JSON сериализация
- **build_runner** (2.4.13) — Генерация кода
### UI & UX
- **flutter_screenutil** (5.9.0) — Адаптивная верстка
- **cached_network_image** (3.4.1) — Кэширование изображений
- **shimmer** (3.0.0) — Skeleton loading
- **auto_size_text** (3.0.0) — Автоматический размер текста
- **fl_chart** (0.68.0) — Графики и диаграммы
- **audioplayers** (6.1.0) — Воспроизведение аудио
### Additional
- **shared_preferences** (2.2.3) — Локальное хранилище
- **google_sign_in** (6.2.1) — Google авторизация
- **telegram_web_app** (0.3.3) — Telegram Web App API
- **url_launcher** (6.2.6) — Открытие ссылок
- **package_info_plus** (8.0.0) — Информация о пакете
### Common Packages
- **mnemo_cards_common** — Общие модели и утилиты
- **mnemo_cards_frontend_common** — Общий функционал для фронтенда
- **mnemo_cards_chat** — Чат-модуль
- **payloads_shared**, **bridge_core**, **game_tests** — Игровые модули
## 📁 Структура проекта
```
mnemo_cards_web_v2/
├── lib/
│ ├── main.dart # Точка входа приложения
│ ├── app.dart # Главный виджет приложения
│ ├── firebase_options.dart # Firebase конфигурация
│ │
│ ├── di/ # Dependency Injection (yx_scope)
│ │ ├── app_scope/ # Корневой скоуп
│ │ │ ├── app_scope.dart
│ │ │ ├── app_scope_container.dart
│ │ │ ├── app_scope_holder.dart
│ │ │ └── modules/ # Модули AppScope
│ │ │ ├── analytics_module.dart
│ │ │ ├── auth_module.dart
│ │ │ ├── router_module.dart
│ │ │ └── storage_module.dart
│ │ │
│ │ └── user_scope/ # Пользовательский скоуп
│ │ ├── user_scope.dart
│ │ ├── user_scope_container.dart
│ │ ├── user_scope_holder.dart
│ │ └── modules/ # Модули UserScope
│ │ ├── packs_module.dart
│ │ ├── games_module.dart
│ │ ├── statistics_module.dart
│ │ ├── profile_module.dart
│ │ ├── purchase_module.dart
│ │ ├── tasks_module.dart
│ │ ├── favorites_module.dart
│ │ ├── chat_module.dart
│ │ └── ...
│ │
│ ├── domain/ # Бизнес-логика
│ │ ├── services/ # Сервисы
│ │ │ ├── api_service.dart
│ │ │ ├── auth_service.dart
│ │ │ ├── analytics_service.dart
│ │ │ └── ...
│ │ │
│ │ └── state/ # State Managers
│ │ ├── theme_state_manager.dart
│ │ ├── user_state_manager.dart
│ │ ├── packs_state_manager.dart
│ │ ├── games_state_manager.dart
│ │ └── ...
│ │
│ ├── presentation/ # UI слой
│ │ ├── router/ # Роутинг
│ │ │ └── app_router.dart
│ │ │
│ │ ├── theme/ # Темы оформления
│ │ │ ├── app_theme.dart
│ │ │ └── app_colors.dart
│ │ │
│ │ ├── pages/ # Страницы приложения
│ │ │ ├── auth/ # Авторизация
│ │ │ ├── home/ # Главная (темы)
│ │ │ ├── games/ # Список игр
│ │ │ ├── game/ # Игровая страница
│ │ │ ├── pack_details/ # Детали темы
│ │ │ ├── statistics/ # Статистика
│ │ │ ├── profile/ # Профиль
│ │ │ ├── purchase/ # Покупки
│ │ │ ├── tasks/ # Задания
│ │ │ └── test/ # Тестирование
│ │ │
│ │ └── widgets/ # Переиспользуемые виджеты
│ │ ├── main_shell.dart # Основной shell с навигацией
│ │ ├── pack_card.dart # Карточка темы
│ │ ├── game_card.dart # Карточка игры
│ │ ├── card_flipper/ # Flipper карточек
│ │ ├── game/ # Игровые виджеты
│ │ ├── loading/ # Shimmer загрузки
│ │ └── ...
│ │
│ └── utils/ # Утилиты
│ ├── responsive.dart
│ ├── color_extension.dart
│ └── ...
├── test/ # Тесты
│ ├── unit/ # Unit тесты
│ ├── widget/ # Widget тесты
│ └── integration/ # Интеграционные тесты
├── web/ # Web-специфичные файлы
│ ├── index.html
│ ├── manifest.json
│ └── icons/
├── deploy/ # Конфигурация деплоя
│ ├── nginx.conf
│ └── README.md
├── icons/ # Иконки приложения
├── fonts/ # Шрифты (Nunito)
├── pubspec.yaml # Зависимости
├── analysis_options.yaml # Lint правила
├── README.md # Этот файл
├── QUICK_START.md # Быстрый старт
├── project_config.md # Конфигурация проекта
└── open_api.yaml # API спецификация
2025-11-10 23:55:41 +00:00
```
2025-12-14 19:21:36 +00:00
## 🔧 Разработка
### Генерация кода
При изменении классов с аннотациями `@freezed`, `@JsonSerializable` и т.д.:
2025-11-10 23:55:41 +00:00
```bash
2025-12-14 19:21:36 +00:00
# Одноразовая генерация
2025-11-10 23:55:41 +00:00
flutter pub run build_runner build --delete-conflicting-outputs
2025-12-14 19:21:36 +00:00
# Автоматическая генерация при изменениях
flutter pub run build_runner watch --delete-conflicting-outputs
2025-11-10 23:55:41 +00:00
```
2025-12-14 19:21:36 +00:00
### Работа с Firebase
2025-11-10 23:55:41 +00:00
```bash
2025-12-14 19:21:36 +00:00
# 1. Установите Firebase CLI
npm install -g firebase-tools
# 2. Авторизуйтесь
firebase login
# 3. Настройте проект
flutterfire configure
2025-11-10 23:55:41 +00:00
```
2025-12-14 19:21:36 +00:00
### Линтинг
```bash
# Анализ кода
flutter analyze
# Исправление форматирования
dart format lib/ test/ -l 80
```
2025-11-10 23:55:41 +00:00
2025-12-14 19:21:36 +00:00
### Отладка
```bash
# Запуск с hot reload
flutter run -d chrome
# Запуск с DevTools
flutter run -d chrome --observatory-port=8888
# Запуск с verbose логированием
flutter run -d chrome -v
2025-11-10 23:55:41 +00:00
```
2025-12-14 19:21:36 +00:00
### API Integration
API сервера описано в `open_api.yaml`. Backend должен быть запущен локально или доступен по URL.
```bash
# Локальный backend
cd ../mnemo_cards_backend
./run_dev.sh
2025-11-10 23:55:41 +00:00
```
2025-12-14 19:21:36 +00:00
## 🧪 Тестирование
2025-11-10 23:55:41 +00:00
2025-12-14 19:21:36 +00:00
### Запуск тестов
2025-11-10 23:55:41 +00:00
2025-12-14 19:21:36 +00:00
```bash
# Все тесты
flutter test
2025-11-10 23:55:41 +00:00
2025-12-14 19:21:36 +00:00
# Unit тесты
flutter test test/unit/
2025-11-10 23:55:41 +00:00
2025-12-14 19:21:36 +00:00
# Widget тесты
flutter test test/widget/
2025-11-10 23:55:41 +00:00
2025-12-14 19:21:36 +00:00
# С покрытием
flutter test --coverage
2025-11-10 23:55:41 +00:00
2025-12-14 19:21:36 +00:00
# Конкретный тест
flutter test test/unit/domain/state/theme_state_manager_test.dart
```
### Правила тестирования
- ✅ Используйте `yx_state` и `yx_scope` в тестах
- ✅ Следуйте Clean Architecture
- ✅ Модулизируйте код и разбивайте на файлы
- ✅ Пишите unit-тесты для всех функциональностей
- ✅ Используйте `mocktail` для мокирования
См. также: [.cursor/rules/write-tests.mdc](.cursor/rules/write-tests.mdc)
## 🚀 Деплой
### Автоматический деплой
2025-11-10 23:55:41 +00:00
```bash
2025-12-14 19:21:36 +00:00
# Из корня проекта mnemo_cards_web_v2
./deploy.sh
2025-11-10 23:55:41 +00:00
```
2025-12-14 19:21:36 +00:00
Скрипт деплоя:
1. ✅ Собирает Flutter web app с оптимизацией `-O4`
2. ✅ Загружает на сервер `147.45.152.129`
3. ✅ Настраивает Nginx для домена `mnemo-cards.online`
4. ✅ Настраивает SSL сертификаты (Let's Encrypt)
5. ✅ Настраивает firewall
### Ручной деплой
2025-11-10 23:55:41 +00:00
```bash
2025-12-14 19:21:36 +00:00
# 1. Соберите приложение
flutter build web -O4 --release
# 2. Загрузите на сервер
rsync -avz --delete build/web/ user@server:/var/www/mnemo-cards/
# 3. Настройте Nginx (см. deploy/nginx.conf)
2025-11-10 23:55:41 +00:00
```
2025-12-14 19:21:36 +00:00
Подробнее: [deploy/README.md](./deploy/README.md)
## 📚 Дополнительная документация
### Внутренняя документация
- [QUICK_START.md](./QUICK_START.md) — Быстрый старт за 2 команды
- [project_config.md](./project_config.md) — Конфигурация проекта
- [deploy/README.md](./deploy/README.md) — Инструкция по деплою
### Backend
- [mnemo_cards_backend/README.md](../mnemo_cards_backend/README.md) — Backend документация
- `open_api.yaml` — API спецификация
### Правила разработки
- [.cursor/rules/write-tests.mdc](.cursor/rules/write-tests.mdc) — Правила написания тестов
- [.cursor/rules/mnemo-cards-web.mdc](../.cursor/rules/mnemo-cards-web.mdc) — Правила разработки веб-приложения
## 🔗 Полезные ссылки
- [Flutter Documentation](https://docs.flutter.dev/)
- [yx_scope Documentation](packages/yx/city-services-pub/yx_scope/README.md)
- [yx_state Documentation](packages/yx/city-services-pub/yx_state/README.md)
- [GoRouter Documentation](https://pub.dev/packages/go_router)
- [Freezed Documentation](https://pub.dev/packages/freezed)
## 📄 Лицензия
Proprietary - все права защищены.
## 👨‍💻 Автор
2025-11-10 23:55:41 +00:00
2025-12-14 19:21:36 +00:00
Dmitry - [mnemo-cards.online](https://mnemo-cards.online)
2025-11-10 23:55:41 +00:00
2025-12-14 19:21:36 +00:00
---
2025-11-10 23:55:41 +00:00
2025-12-14 19:21:36 +00:00
<div align="center">
**mnemo_cards_web_v2** | Made with ❤️ using Flutter
2025-11-10 23:55:41 +00:00
2025-12-14 19:21:36 +00:00
</div>