From 53bb80dc5eb373e0326df1920e2f4484f936a6e4 Mon Sep 17 00:00:00 2001 From: Dauren777 Date: Mon, 1 Jun 2026 12:18:33 +0000 Subject: [PATCH] =?UTF-8?q?=D0=A2=D0=B5=D1=85=D0=BD=D0=B8=D1=87=D0=B5?= =?UTF-8?q?=D1=81=D0=BA=D0=BE=D0=B5=20=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=93=D0=B0=D0=BB=D0=B8=D0=BA=D0=BE=D0=BD=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20=D1=80=D0=B0=D0=B7=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D1=87=D0=B8=D0=BA=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TZ_GALIKON.md | 344 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 344 insertions(+) create mode 100644 TZ_GALIKON.md diff --git a/TZ_GALIKON.md b/TZ_GALIKON.md new file mode 100644 index 0000000..699c634 --- /dev/null +++ b/TZ_GALIKON.md @@ -0,0 +1,344 @@ +# Техническое задание: Галикон + +## 1. Общее описание + +**Название:** Галикон — мобильное веб-приложение для спортсменов, тренеров и родителей. + +**Цель:** Единая платформа для юных спортсменов (дети от 10 лет): дневник тренировок, контроль здоровья, рейтинги, чаты, игры, нормативы, сравнение с чемпионами. Аналогов в мире нет. + +**Пользователи:** +- Спортсмен (основной пользователь) +- Тренер (видит своих учеников) +- Родитель (видит профиль ребёнка) +- Администратор (управление пользователями) + +--- + +## 2. Технический стек + +| Слой | Технология | +|------|-----------| +| Фронтенд | React / Vue 3 + TypeScript, PWA | +| Бэкенд | Node.js (Express/Fastify) или Go | +| База данных | PostgreSQL | +| Кэш | Redis | +| Файлы | S3-совместимое хранилище (MinIO) | +| Чат | WebSocket (Socket.io) | +| Push-уведомления | Firebase Cloud Messaging / Web Push API | +| Авторизация | JWT + refresh tokens | +| Хостинг | Docker + Kubernetes или VPS | + +--- + +## 3. Функциональные требования + +### 3.1. Регистрация и вход + +**Регистрация — 8 шагов:** +1. ФИО (string, обязательно) +2. Логин (латиница, уникальный) + пароль (хеширование bcrypt, минимум 6 символов) +3. Вид спорта (select из 39 олимпийских видов) +4. Роль: спортсмен / тренер / родитель (если родитель — поле «Имя ребёнка») +5. Дата рождения → возраст вычисляется автоматически. Аватарка (эмодзи на выбор) или загрузка фото (JPEG/PNG, макс 5 МБ) +6. Страна (select) → город (datalist с подсказками по стране) +7. Клуб, тренер (ФИО), разряд/звание, цель (произвольный текст) +8. Телефон (обязательно, валидация формата) + Email (обязательно) + +**Вход:** +- Логин + пароль +- JWT access token (15 мин) + refresh token (30 дней) +- Rate limiting: 5 попыток → блокировка на 1 минуту +- Автовыход через 30 минут бездействия + +**Безопасность:** +- Пароли: bcrypt с солью +- CSP-заголовки +- Санитизация всех пользовательских вводов (XSS-защита) +- HTTPS обязательно +- CORS только для доверенных доменов + +--- + +### 3.2. Профиль спортсмена + +**Отображение:** +- Аватар, ФИО, вид спорта, роль +- Дата рождения, возраст, страна, город +- Клуб, тренер, разряд, цель +- Телефон, email + +**Значки (геймификация):** +Автоматический подсчёт по данным пользователя: +- 🏊 Первая тренировка (1+ запись в дневнике) +- 📖 10 тренировок +- 🔥 30 тренировок +- 🏆 Рекордсмен (есть достижения) +- 🎯 Снайпер (победа в игре «Угадай число») +- ⚡ Молния (реакция < 300 мс) +- 🧠 Знаток (викторина 5+/8) +- 💪 100 км (суммарный километраж > 100) + +**Достижения:** +Пользователь добавляет: название, дата, описание. Отображаются списком. + +**Отчёт для тренера (PDF):** +- Генерация PDF на сервере (Puppeteer / wkhtmltopdf) +- Содержит: ФИО, спорт, клуб, тренер, разряд, цель, значки, достижения, последние 10 записей дневника + +--- + +### 3.3. Дневник тренировок + +**Поля записи:** +- Дата (date, обязательно) +- Тип тренировки (select: Скорость / Техника / Выносливость / ОФП / Соревнование) +- Километраж (число, км) +- Лучшее время (строка) +- Самочувствие (1-5) +- Заметка (текст) + +**История:** +- Список записей, сортировка по дате (новые сверху) +- Удаление записи + +**Агрегация (для тренера):** +- Всего тренировок +- Суммарный километраж +- Среднее самочувствие +- График прогресса по времени (библиотека Chart.js) + +--- + +### 3.4. Календарь соревнований + +**Добавление события:** +- Название (string) +- Дата (date) +- Место (string) + +**Отображение:** +- Предстоящие (сортировка по дате) +- Прошедшие (сортировка по дате, обратная) + +**Дополнительно (желательно):** +- Push-уведомление за день до события +- Цветовое кодирование по типу (соревнование / сборы / тренировка) + +--- + +### 3.5. Чаты + +**Архитектура:** +- WebSocket-соединение (Socket.io) +- Комнаты: личные (1-на-1), групповые +- Сообщения хранятся в PostgreSQL +- Индикатор «прочитано/не прочитано» + +**Функции:** +- Список чатов с другими пользователями +- Фильтр по роли: Все / Спортсмены / Тренеры / Родители +- Отправка текстовых сообщений +- Счётчик непрочитанных +- Групповые чаты (создание, добавление участников) + +**Встроенные игры (в чате):** +1. **Крестики-нолики** — пошаговая игра, синхронизация через WebSocket +2. **Угадай число (1-100)** — 7 попыток, победа < 5 попыток = +2 звезды +3. **Реакция** — измерение времени реакции, рекорд < 300 мс = +1 звезда +4. **Спорт-викторина** — 8 вопросов, результат 5+/8 = +1-5 звёзд + +--- + +### 3.6. Рейтинговая система + +**Звёзды начисляются за:** +- Победы в играх +- Высокие результаты викторины +- Голоса других пользователей + +**Рейтинг:** +- Топ-5 спортсменов по звёздам +- Отображение: место, ФИО, звёзды, результаты викторины, победы в играх +- Топ-3 выделены золотом/серебром/бронзой + +--- + +### 3.7. Инструменты + +**Нормативы:** +- Статическая таблица разрядов по плаванию (50 м бассейн): МСМК → 2 юношеский +- Дистанции: 50 м, 100 м, 400 м вольный стиль + +**Сравнение с чемпионами:** +- Данные Калеба Дрессела по возрастам (14-18 лет) +- Пользователь вводит своё время и возраст → сравнение +- Показывает: текущий результат → КМС → результат Дрессела в этом возрасте + +**Анализ видео:** +- Загрузка видео (MP4, макс 200 МБ) +- Плеер с покадровой перемоткой (шаг 0.033 сек, 0.1 сек, 1 сек) +- Счётчик текущего кадра +- Play/Pause + +**Витамины:** +- Чек-лист на сегодня: D3, Омега-3, Магний, Цинк, BCAA +- Сохранение истории по дням + +**Сон и пульс:** +- Запись часов сна и утреннего пульса +- Средние значения за 7 дней + +**Анализы:** +- Гемоглобин, Ферритин, Витамин D, Витамин B12 +- История значений с датами + +**Видеоуроки:** +- Список поисковых запросов для YouTube (12 тем по технике плавания) + +--- + +### 3.8. Кабинет тренера + +**Поиск учеников:** +- Автоматически: все пользователи, у которых поле «Тренер» совпадает с ФИО тренера + +**Отображение по каждому ученику:** +- Аватар, ФИО, вид спорта, разряд, цель +- Суммарный километраж +- Последние 5 тренировок (дата, тип, км, время) + +--- + +### 3.9. Кабинет родителя + +**Привязка ребёнка:** +- Родитель вводит логин ребёнка → привязка (сохраняется в профиле родителя) + +**Отображение:** +- Профиль ребёнка (как у спортсмена) +- Статистика: всего тренировок, км, среднее самочувствие +- Значки ребёнка +- Дневник тренировок (последние 15 записей) +- Цель и тренер ребёнка +- Кнопка «Отвязать» + +--- + +### 3.10. Админ-панель + +**Доступ:** +- Отдельный мастер-пароль администратора + +**Функции:** +- Просмотр всех пользователей (ФИО, роль, логин, спорт, клуб, звёзды) +- Удаление пользователя +- Сброс пароля пользователя + +--- + +### 3.11. PWA (Progressive Web App) + +**Требования:** +- manifest.json с иконками (192x192, 512x512) +- Service Worker для офлайн-доступа +- Установка на домашний экран (iOS/Android) +- Режим standalone (без адресной строки браузера) +- Splash screen на iOS + +--- + +## 4. Нефункциональные требования + +| Параметр | Значение | +|----------|---------| +| Язык интерфейса | Русский | +| Адаптивность | Mobile-first, поддержка десктопа | +| Браузеры | Chrome 90+, Safari 14+, Firefox 90+ | +| Производительность | First paint < 2 сек, взаимодействие < 100 мс | +| Доступность | WCAG 2.1 AA | +| Масштабируемость | До 100 000 пользователей | +| Резервное копирование | Ежедневный бэкап БД | + +--- + +## 5. API (основные эндпоинты) + +``` +POST /api/auth/register — регистрация +POST /api/auth/login — вход +POST /api/auth/refresh — обновление токена +GET /api/profile — профиль текущего пользователя +PUT /api/profile — обновление профиля +GET /api/profile/:id — профиль другого пользователя +POST /api/achievements — добавить достижение +GET /api/diary — дневник (список) +POST /api/diary — новая запись +DELETE /api/diary/:id — удалить запись +GET /api/events — календарь +POST /api/events — добавить событие +DELETE /api/events/:id — удалить событие +GET /api/chats — список чатов +GET /api/chats/:id/messages — сообщения чата +POST /api/chats/:id/messages — отправить сообщение +WS /ws/chat — WebSocket для чата +POST /api/vote/:userId — проголосовать за пользователя +GET /api/ranking — рейтинг (топ) +GET /api/coach/students — ученики тренера +POST /api/parent/link — привязать ребёнка +GET /api/admin/users — список пользователей (админ) +DELETE /api/admin/users/:id — удалить пользователя (админ) +POST /api/admin/users/:id/reset-password — сброс пароля (админ) +GET /api/report/pdf — PDF-отчёт для тренера +POST /api/upload/avatar — загрузка аватара +POST /api/upload/video — загрузка видео +POST /api/upload/photo — загрузка фото +``` + +--- + +## 6. База данных (основные таблицы) + +```sql +users: id, login, password_hash, name, sport, role, birth_date, age, + country, city, club, coach, rank, goal, phone, email, + avatar_url, photo_url, stars, quiz_score, games_won, + created_at, updated_at + +achievements: id, user_id, title, date, description + +diary_entries: id, user_id, date, type, km, best_time, feel, note + +events: id, user_id, title, date, location + +messages: id, chat_id, from_user_id, to_user_id, text, read, created_at + +chats: id, type (direct/group), name + +chat_members: chat_id, user_id + +vitamins: id, user_id, date, vitamin_type, taken + +sleep_log: id, user_id, date, hours, pulse + +tests: id, user_id, test_type, value, date + +parent_links: parent_id, child_id + +votes: voter_id, target_id, created_at +``` + +--- + +## 7. Этапы разработки + +| Этап | Содержание | Срок | +|------|-----------|------| +| 1 | База данных, API авторизации, регистрация | 2 недели | +| 2 | Профиль, дневник, календарь | 2 недели | +| 3 | Чаты (WebSocket) + игры | 2 недели | +| 4 | Рейтинг, кабинет тренера, кабинет родителя | 1 неделя | +| 5 | Инструменты (нормативы, сравнение, видео, витамины) | 1 неделя | +| 6 | Админ-панель, PDF-отчёт | 1 неделя | +| 7 | PWA, тестирование, деплой | 1 неделя | + +**Итого:** ~10 недель на MVP командой из 2-3 разработчиков.