# 📚 Полная документация проекта "Бегущий Башкир"
## Версия 1.0 | Декабрь 2025

---

## 🏃‍♂️ ОПИСАНИЕ ПРОЕКТА

### 1.1 Общая концепция
**"Бегущий Башкир"** — комплексная цифровая платформа для бегового клуба, объединяющая веб-сайт, REST API и аналитические сервисы. Проект создан для развития бегового сообщества Республики Башкортостан и предоставляет современные инструменты для организации тренировок, мероприятий и взаимодействия между участниками.

### 1.2 Основные цели
- Создание централизованной системы управления беговым клубом
- Автоматизация процессов регистрации, учета и статистики
- Формирование активного сообщества бегунов
- Продвижение здорового образа жизни и спорта в регионе
- Сохранение культурных особенностей (поддержка русского и башкирского языков)

### 1.3 Доменные имена
- **Основной сайт:** `begushiybashkir.ru`
- **API сервер:** `api.begushiybashkir.ru` (в перспективе)
- **Дополнительные:** В рамках общего кластера с другими проектами

---

## 🏗️ АРХИТЕКТУРА СИСТЕМЫ

### 2.1 Компонентная диаграмма
```
┌─────────────────────────────────────────────────────────────┐
│                     Docker Compose Cluster                   │
├─────────────────────────────────────────────────────────────┤
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────┐   │
│  │  Nginx   │  │  API_TP  │  │  API_BB  │  │  API_ES  │   │
│  │ (Proxy)  │◄─┤(Yalarba) │  │(Бег.Баш)│  │(Easysite)│   │
│  └────┬─────┘  └──────────┘  └──────────┘  └──────────┘   │
│       │                │           │              │         │
│  ┌────▼─────┐  ┌──────▼────┐  ┌───▼────┐  ┌──────▼────┐   │
│  │ Certbot  │  │    DB     │  │ DB_BB  │  │  DB_TP    │   │
│  │  (SSL)   │  │ (Postgres)│  │(Postgr)│  │ (Postgres)│   │
│  └──────────┘  └───────────┘  └────────┘  └───────────┘   │
│                                                             │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────┐   │
│  │Analytics │  │ Easysite │  │ Vue SPA  │  │ StubSite │   │
│  │ (Node.js)│  │ (Nuxt.js)│  │(Frontend)│  │  (Загл.) │   │
│  └──────────┘  └──────────┘  └──────────┘  └──────────┘   │
└─────────────────────────────────────────────────────────────┘
```

### 2.2 Сетевые сегменты
```yaml
networks:
  web-network:    # Внешний доступ (80/443 порты)
  internal:       # Внутренняя коммуникация
  app-network:    # Для Yalarba/Easysite приложений
  bb-network:     # Изолированная сеть "Бегущий Башкир"
```

### 2.3 Технологический стек

#### Backend
- **Go 1.25.1** (API сервисы)
- **Chi Router** v5 (HTTP роутинг)
- **GORM** v1.31.0 (ORM для PostgreSQL)
- **JWT** (аутентификация)
- **Validator** v10 (валидация данных)

#### Frontend
- **Vue 3** (Composition API)
- **Vite** (сборка)
- **Pinia** (управление состоянием)
- **Vue Router** (навигация)
- **SCSS/CSS3** (стили)

#### Базы данных
- **PostgreSQL 15** (основные данные)
- **Альпийский образ** (легковесная версия)

#### Инфраструктура
- **Docker & Docker Compose**
- **Nginx** (обратный прокси)
- **Certbot** (SSL сертификаты)
- **Node.js** (аналитика)

---

## 📦 DOCKER КОМПОЗИЦИЯ

### 3.1 Сервисы кластера

#### Основные сервисы "Бегущий Башкир":
```yaml
api_bb:           # REST API на Go (порт 7777)
  - Ядро бизнес-логики
  - Аутентификация и авторизация
  - Управление тренировками и событиями
  - Обработка достижений и статистики

db_bb:            # База данных (порт 5433)
  - Изолированная БД для проекта
  - Хранение всех данных бегового клуба
  - Автоматическое резервное копирование

nginx:            # Веб-сервер (порты 80/443)
  - Статический контент Vue SPA
  - Проксирование к API
  - SSL/TLS терминация
  - Кэширование и сжатие
```

#### Общие сервисы кластера:
```yaml
certbot:          # SSL сертификаты
  - Автоматическое обновление Let's Encrypt
  - Поддержка wildcard сертификатов
  - Мониторинг истечения срока

analytics:        # Аналитика (порт 9999)
  - Сбор статистики посещений
  - Аналитика пользовательского поведения
  - Генерация отчетов
```

### 3.2 Порты и доступ
| Сервис | Порт | Назначение | Доступ |
|--------|------|------------|---------|
| nginx | 80 | HTTP | публичный |
| nginx | 443 | HTTPS | публичный |
| api_bb | 7777 | API | внутренний |
| db_bb | 5433 | База данных | внутренний |
| analytics | 9999 | Аналитика | внутренний |

### 3.3 Volumes (тома данных)
```yaml
db_bb_data:        # Основные данные БД
api_bb_uploads:    # Загружаемые файлы (фото, документы)
analytics_logs:    # Логи аналитики
analytics_data:    # Данные аналитики
certbot_data:      # SSL сертификаты
certbot_www:       # Веб-контент для верификации
```

### 3.4 Health Checks
Все сервисы включают проверки здоровья:
- **Интервал:** 30 секунд
- **Таймаут:** 10 секунд
- **Попытки:** 3-5 раз
- **Период старта:** 40 секунд

Пример для API:
```yaml
healthcheck:
  test: ["CMD", "wget", "--spider", "http://localhost:8080/api/health"]
```

---

## 🗄️ СТРУКТУРА ДАННЫХ (API_BB)

### 4.1 Основные сущности

#### Пользователь (User)
```sql
CREATE TABLE users (
    id UUID PRIMARY KEY,
    email VARCHAR(255) UNIQUE NOT NULL,
    first_name VARCHAR(100),
    last_name VARCHAR(100),
    avatar_url TEXT,
    phone VARCHAR(20),
    experience_level INTEGER, -- 1: новичок, 2: любитель, 3: профессионал
    goals TEXT[], -- массив целей
    newsletter_subscription BOOLEAN DEFAULT true,
    role VARCHAR(20) DEFAULT 'user', -- user, admin
    created_at TIMESTAMP DEFAULT NOW(),
    updated_at TIMESTAMP DEFAULT NOW()
);
```

#### Тренировка (Workout)
```sql
CREATE TABLE workouts (
    id UUID PRIMARY KEY,
    user_id UUID REFERENCES users(id),
    type VARCHAR(50), -- easy, tempo, interval, long, recovery
    distance_km DECIMAL(5,2),
    duration_minutes INTEGER,
    avg_pace_min_per_km DECIMAL(4,2),
    calories_burned INTEGER,
    notes TEXT,
    workout_date DATE NOT NULL,
    created_at TIMESTAMP DEFAULT NOW()
);
```

#### Событие (Event)
```sql
CREATE TABLE events (
    id UUID PRIMARY KEY,
    title VARCHAR(255) NOT NULL,
    description TEXT,
    type VARCHAR(50), -- race, training, social, workshop
    event_date TIMESTAMP NOT NULL,
    location VARCHAR(255),
    distance_km DECIMAL(5,2),
    max_participants INTEGER,
    is_registration_open BOOLEAN DEFAULT true,
    registration_deadline TIMESTAMP,
    created_at TIMESTAMP DEFAULT NOW()
);
```

#### Достижение (Achievement)
```sql
CREATE TABLE achievements (
    id UUID PRIMARY KEY,
    user_id UUID REFERENCES users(id),
    title VARCHAR(255) NOT NULL,
    description TEXT,
    type VARCHAR(50), -- distance, speed, consistency, event, special
    verified BOOLEAN DEFAULT false,
    badge_url TEXT,
    achieved_date DATE NOT NULL,
    created_at TIMESTAMP DEFAULT NOW()
);
```

### 4.2 Связи между таблицами
- **users** ↔ **workouts** (один ко многим)
- **users** ↔ **achievements** (один ко многим)
- **users** ↔ **events** (многие ко многим через registrations)
- **users** ↔ **personal_bests** (один ко многим)

---

## 🔐 СИСТЕМА БЕЗОПАСНОСТИ

### 5.1 Аутентификация
- **JWT токены** (Access + Refresh)
- **HTTP-only cookies** для клиентского хранения
- **Валидация email** через подтверждение
- **Сброс пароля** через email токены

### 5.2 Авторизация
- **Ролевая модель:** user, admin
- **Middleware защита** маршрутов
- **Проверка прав доступа** к ресурсам

### 5.3 Защита данных
- **BCrypt** для хеширования паролей
- **Подготовленные SQL-запросы** (GORM)
- **Валидация входных данных**
- **CORS политики**
- **Rate limiting** (в разработке)

---

## 🌐 ФРОНТЕНД АРХИТЕКТУРА (Vue SPA)

### 6.1 Структура компонентов
```
src/
├── components/           # Переиспользуемые компоненты
│   ├── NavigationMenu.vue
│   ├── EventCard.vue
│   ├── RegistrationCard.vue
│   ├── StatsChart.vue
│   └── AchievementBadge.vue
├── pages/               # Страницы приложения
│   ├── Home.vue         # Главная страница
│   ├── About.vue        # О клубе
│   ├── Gallery.vue      # Галерея
│   ├── Achievements.vue # Достижения
│   ├── DetailedStats.vue # Статистика
│   ├── Events.vue       # События
│   └── Profile.vue      # Профиль пользователя
├── stores/              # Состояние (Pinia)
│   ├── auth.js          # Авторизация
│   ├── stats.js         # Статистика
│   └── events.js        # События
├── router/              # Маршрутизация
│   └── index.js
└── assets/              # Ресурсы
    ├── logo/
    ├── images/
    └── main.scss
```

### 6.2 Цветовая схема
```scss
$primary-color: #2e8b57;    // Зеленый (природа, здоровье)
$accent-color: #ffd700;     // Золотой (достижения)
$background: #f8fff8;       // Светло-зеленый фон
$text-color: #2c3e50;       // Темно-серый текст
$error-color: #e74c3c;      // Красный для ошибок
$success-color: #27ae60;    // Зеленый для успеха
```

### 6.3 Адаптивный дизайн
| Breakpoint | Устройство | Контейнер |
|------------|------------|-----------|
| < 360px    | Маленькие телефоны | 100% |
| 360-480px  | Телефоны | 100% |
| 481-768px  | Планшеты | 720px |
| 769-1024px | Ноутбуки | 960px |
| > 1024px   | Десктопы | 1140px |

---

## 🔄 API ДОКУМЕНТАЦИЯ

### 7.1 Базовый URL
```
https://begushiybashkir.ru/api/v1/
```

### 7.2 Статус коды
- `200` - Успех
- `201` - Создано
- `400` - Ошибка валидации
- `401` - Не авторизован
- `403` - Доступ запрещен
- `404` - Не найдено
- `500` - Серверная ошибка

### 7.3 Основные эндпоинты

#### Аутентификация
```http
POST   /auth/register
POST   /auth/login
POST   /auth/logout
POST   /auth/refresh-token
POST   /auth/password-reset/request
POST   /auth/password-reset/confirm
GET    /auth/verify-email?token={token}
```

#### Пользователи
```http
GET    /users/profile
PUT    /users/profile
GET    /users/{id}/achievements
GET    /users/{id}/stats
```

#### Тренировки
```http
GET    /workouts?date_from=&date_to=&type=
POST   /workouts
GET    /workouts/{id}
PUT    /workouts/{id}
DELETE /workouts/{id}
GET    /workouts/stats/monthly
```

#### События
```http
GET    /events?type=&status=
GET    /events/{id}
POST   /events/{id}/register
DELETE /events/{id}/register
GET    /events/my-registrations
```

#### Достижения
```http
GET    /achievements?type=&verified=
POST   /achievements
PUT    /achievements/{id}
GET    /achievements/types
```

### 7.4 Пример запроса
```javascript
// Регистрация пользователя
fetch('/api/v1/auth/register', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    email: 'user@example.com',
    password: 'SecurePass123!',
    firstName: 'Иван',
    lastName: 'Иванов',
    phone: '+79161234567'
  })
});
```

---

## 🚀 РАЗВЕРТЫВАНИЕ

### 8.1 Требования
- Docker 20.10+
- Docker Compose 2.0+
- 2 ГБ RAM минимум
- 10 ГБ свободного места
- Доступ к портам 80, 443

### 8.2 Настройка окружения
```bash
# 1. Клонирование
git clone <repository>
cd project

# 2. Настройка переменных
cp .env.example .env
# Редактируем .env:
# EMAIL=admin@example.com
# ALL_DOMAINS=begushiybashkir.ru,www.begushiybashkir.ru
# DB_PASSWORD=strong_password

# 3. Запуск
docker-compose up -d

# 4. Проверка
docker-compose ps
docker-compose logs -f nginx
```

### 8.3 Настройка DNS
```
A запись: begushiybashkir.ru → IP сервера
CNAME запись: www → begushiybashkir.ru
```

### 8.4 Первоначальная настройка
1. **Проверка SSL:** `https://begushiybashkir.ru`
2. **Проверка API:** `https://begushiybashkir.ru/api/health`
3. **Создание админа:** через миграции или CLI
4. **Настройка SMTP:** для email рассылок

---

## 📊 МОНИТОРИНГ И ЛОГИРОВАНИЕ

### 9.1 Логи
- **Nginx:** доступы и ошибки
- **API:** бизнес-логика и ошибки
- **База данных:** медленные запросы
- **Docker:** системные логи

### 9.2 Health Checks
```
GET /health                 # Общий статус
GET /api/health             # Статус API
GET /database/health        # Статус БД
```

### 9.3 Метрики
- **Количество пользователей**
- **Активные тренировки**
- **Регистрации на события**
- **Время отклика API**
- **Ошибки по типам**

---

## 🔧 ОБСЛУЖИВАНИЕ

### 10.1 Регулярные задачи
```bash
# Ежедневно
docker-compose exec db_bb pg_dump -U postgres bb_db > backup.sql

# Еженедельно
docker-compose restart nginx
docker system prune -a

# Ежемесячно
certbot renew --dry-run
check disk usage
```

### 10.2 Резервное копирование
```yaml
# docker-compose.backup.yml
version: '3.8'
services:
  backup:
    image: postgres:15-alpine
    volumes:
      - ./backups:/backups
    command: >
      sh -c "
        PGPASSWORD=postgres pg_dump -h db_bb -U postgres bb_db > 
        /backups/bb_db_$(date +%Y%m%d_%H%M%S).sql
      "
```

### 10.3 Восстановление
```bash
# Восстановление БД
docker-compose exec -T db_bb psql -U postgres bb_db < backup.sql

# Восстановление загруженных файлов
cp -r backup/uploads/* ./api_bb_uploads/
```

---

## 📈 МАСШТАБИРОВАНИЕ

### 11.1 Горизонтальное
1. Добавление инстансов API
2. Балансировка через Nginx
3. Кэширование через Redis
4. Репликация БД

### 11.2 Вертикальное
1. Увеличение ресурсов контейнеров
2. Оптимизация индексов БД
3. Кэширование частых запросов
4. Асинхронная обработка задач

### 11.3 Конфигурация для продакшена
```yaml
# В docker-compose.prod.yml
services:
  api_bb:
    deploy:
      replicas: 3
      resources:
        limits:
          memory: 512M
        reservations:
          memory: 256M
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"
```

---

## 🐛 ОТЛАДКА И УСТРАНЕНИЕ НЕИСПРАВНОСТЕЙ

### 12.1 Частые проблемы

#### Проблема: SSL не работает
```bash
# Решение:
docker-compose logs certbot
docker-compose exec certbot certbot renew --dry-run
# Проверить DNS записи
```

#### Проблема: API не отвечает
```bash
# Решение:
docker-compose ps api_bb
docker-compose logs api_bb
curl http://localhost:7777/api/health
# Проверить подключение к БД
```

#### Проблема: База данных не запускается
```bash
# Решение:
docker-compose logs db_bb
docker volume ls
# Проверить права на volume
```

### 12.2 Инструменты отладки
```bash
# Проверка сети
docker network inspect bb-network

# Проверка томов
docker volume inspect db_bb_data

# Мониторинг ресурсов
docker stats

# Логи в реальном времени
docker-compose logs -f --tail=100
```

---

## 🔄 ЖИЗНЕННЫЙ ЦИКЛ РАЗРАБОТКИ

### 13.1 Git workflow
```
main           - продакшн
├── develop    - стабильная разработка
│   ├── feature/*  - новые функции
│   └── fix/*      - исправления
└── release/*  - подготовка релизов
```

### 13.2 CI/CD (рекомендации)
```yaml
# .github/workflows/deploy.yml
name: Deploy
on:
  push:
    branches: [main]
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Deploy via SSH
        uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.SERVER_HOST }}
          username: ${{ secrets.SERVER_USER }}
          key: ${{ secrets.SSH_PRIVATE_KEY }}
          script: |
            cd /opt/begushiybashkir
            git pull
            docker-compose down
            docker-compose build
            docker-compose up -d
```

### 13.3 Тестирование
```bash
# Unit тесты Go
cd api_bb
go test ./...

# E2E тесты API
npm run test:api

# Тесты Vue компонентов
npm run test:unit

# Load testing
k6 run load-test.js
```

---

## 📋 ЧЕКЛИСТ ЗАПУСКА

### 14.1 Предзапусковая проверка
- [ ] Доменное имя настроено и разрешается
- [ ] SSL сертификаты получены
- [ ] Переменные окружения установлены
- [ ] Порты 80 и 443 открыты
- [ ] SMTP настроен для email
- [ ] Резервное копирование настроено

### 14.2 Постзапусковая проверка
- [ ] Сайт доступен по HTTPS
- [ ] API отвечает на health checks
- [ ] Базы данных запущены
- [ ] Статика загружается
- [ ] Email отправляется
- [ ] Мониторинг работает

### 14.3 Проверка безопасности
- [ ] Пароли изменены с дефолтных
- [ ] SSH доступ ограничен
- [ ] Firewall настроен
- [ ] Логирование включено
- [ ] Резервные копии тестируются

---

## 🎯 РАЗВИТИЕ ПРОЕКТА

### 15.1 Ближайшие задачи
1. **Мобильное приложение** (React Native)
2. **Интеграция со Strava**
3. **Платежная система** для мероприятий
4. **Push-уведомления**
5. **Расширенная аналитика**

### 15.2 Долгосрочные цели
1. **Международная поддержка**
2. **Партнерская программа**
3. **Онлайн-марафоны**
4. **AI-тренер**
5. **Социальная сеть бегунов**

### 15.3 Сообщество
- **Telegram канал** для анонсов
- **Группа VK** для обсуждений
- **Instagram** для мотивации
- **YouTube** для обучающего контента
- **Офлайн-встречи** раз в месяц

---

## 📞 ПОДДЕРЖКА И КОНТАКТЫ

### 16.1 Техническая поддержка
- **Экстренные вопросы:** Telegram @tech_support
- **Багрепорты:** GitHub Issues
- **Предложения:** feedback@begushiybashkir.ru
- **Документация:** docs.begushiybashkir.ru (в разработке)

### 16.2 Команда проекта
| Роль | Контакты | Ответственность |
|------|----------|-----------------|
| Тренер | +7 (927) 30-93-095 | Тренировки, мероприятия |
| Разработчик | github.com/dev | Техническая часть |
| Контент-менеджер | @content | Новости, галерея |
| Администратор | admin@ | Управление пользователями |

### 16.3 Время работы поддержки
- **Техподдержка:** 24/7 (автоматически)
- **Консультации:** 10:00-18:00 (МСК)
- **Экстренные случаи:** круглосуточно по телефону

---

## 📄 ЛИЦЕНЗИИ И ПРАВА

### 17.1 Используемое ПО
- **Go:** BSD-3-Clause
- **Vue.js:** MIT
- **PostgreSQL:** PostgreSQL License
- **Docker:** Apache 2.0

### 17.2 Политики
- [Политика конфиденциальности](https://begushiybashkir.ru/privacy)
- [Условия использования](https://begushiybashkir.ru/terms)
- [Политика cookies](https://begushiybashkir.ru/cookies)

---

## 🏆 ОСОБЕННОСТИ ПРОЕКТА

### 18.1 Культурный аспект
- Поддержка башкирского языка
- Учет региональных особенностей
- Пропаганда местного спорта
- Сотрудничество с местными организациями

### 18.2 Технические инновации
- Микросервисная архитектура
- Полная контейнеризация
- Автоматическое SSL
- Резидентная инфраструктура

### 18.3 Социальная значимость
- Бесплатные тренировки для новичков
- Поддержка инклюзивности
- Экологический подход (тренировки на природе)
- Сообщество взаимопомощи

---

## 📝 ИЗМЕНЕНИЯ И ОБНОВЛЕНИЯ

### 19.1 Журнал изменений
```
2025-12-04 v1.0 - Первый релиз
- Базовая функциональность
- API для тренировок и событий
- Vue.js фронтенд
- Docker инфраструктура
```

### 19.2 Процесс обновлений
1. Тестирование на staging окружении
2. Резервное копирование продакшена
3. Поэтапное обновление сервисов
4. Мониторинг после обновления
5. Откат при необходимости

---

**✨ Проект "Бегущий Башкир" — это больше чем веб-сайт. Это цифровое сердце бегового сообщества, соединяющее технологические инновации с духом спорта и дружбы.**

---
*Документация обновлена: 4 декабря 2025 года*  
*Проект находится в активной разработке*  
*Версия документации: 1.0*  

Для актуальной информации посетите:  
🌐 **https://begushiybashkir.ru**  
📧 **zog1r@mail.ru**  
📱 **Telegram: @begushiybashkir**