new file: main_dc/BB/api_bb/documentation/docs.md
modified: main_dc/BB/api_bb/readme.md add docs for REST API begushiybashkir.ru
This commit is contained in:
@@ -0,0 +1,372 @@
|
||||
# Документация проекта API бегущего башкира
|
||||
|
||||
## Обзор проекта
|
||||
|
||||
**API бегущего башкира** — это REST API сервис для бегового сообщества Башкортостана, разработанный на Go с использованием современных технологий и архитектурных подходов. Проект предоставляет комплексную платформу для управления тренировками, событиями, достижениями и взаимодействия между бегунами.
|
||||
|
||||
**Текущая версия**: v1 (декабрь 2025)
|
||||
|
||||
## Стек технологий
|
||||
|
||||
### Основные технологии
|
||||
- **Язык**: Go 1.25.1
|
||||
- **Веб-фреймворк**: Chi v5 (роутер)
|
||||
- **ORM**: GORM v1.31.0 с драйвером PostgreSQL
|
||||
- **Аутентификация**: JWT (golang-jwt/jwt/v5)
|
||||
- **Валидация**: validator/v10
|
||||
|
||||
### Вспомогательные библиотеки
|
||||
- **Логирование**: Zap
|
||||
- **Конфигурация**: godotenv
|
||||
- **Работа с email**: go-mail
|
||||
- **Хеширование паролей**: bcrypt (golang.org/x/crypto)
|
||||
- **CORS**: go-chi/cors
|
||||
- **UUID**: google/uuid
|
||||
|
||||
### База данных
|
||||
- **Основная СУБД**: PostgreSQL
|
||||
- **Миграции**: встроенные через GORM AutoMigrate
|
||||
|
||||
## Архитектура проекта
|
||||
|
||||
### Структура каталогов
|
||||
```
|
||||
api_bb/
|
||||
├── cmd/
|
||||
│ └── server/
|
||||
│ └── main.go # Точка входа
|
||||
├── internal/
|
||||
│ ├── config/
|
||||
│ │ └── config.go # Конфигурация приложения
|
||||
│ ├── handlers/
|
||||
│ │ ├── handlers.go # Основной обработчик
|
||||
│ │ ├── health.go # Health check endpoints
|
||||
│ │ ├── auth.go # Аутентификация
|
||||
│ │ └── ... другие обработчики
|
||||
│ ├── models/
|
||||
│ │ ├── user.go # Модель пользователя
|
||||
│ │ ├── workout.go # Модель тренировки
|
||||
│ │ ├── event.go # Модель события
|
||||
│ │ ├── achievement.go # Модель достижений
|
||||
│ │ ├── training_plan.go # Модель плана тренировок
|
||||
│ │ ├── news.go # Модель новостей
|
||||
│ │ ├── review.go # Модель отзывов
|
||||
│ │ ├── gallery.go # Модель галереи
|
||||
│ │ ├── personal_best.go # Модель личных рекордов
|
||||
│ │ ├── user_stats.go # Модель статистики пользователя
|
||||
│ │ ├── email.go # Модель email верификации
|
||||
│ │ └── common.go # Общие DTO и структуры
|
||||
│ ├── repository/
|
||||
│ │ └── user_repository.go # Репозиторий пользователей
|
||||
│ │ └── ... другие репозитории
|
||||
│ ├── service/
|
||||
│ │ └── auth_service.go # Сервис аутентификации
|
||||
│ │ └── ... другие сервисы
|
||||
│ └── routes/
|
||||
│ └── routes.go # Настройка маршрутов
|
||||
├── pkg/
|
||||
│ ├── database/
|
||||
│ │ └── database.go # Подключение к БД
|
||||
│ └── middleware/
|
||||
│ └── middleware.go # Middleware функции
|
||||
├── go.mod # Зависимости
|
||||
└── go.sum # Точные версии зависимостей
|
||||
```
|
||||
|
||||
### Архитектурные принципы
|
||||
|
||||
1. **Чистая архитектура**: Разделение на слои (handler → service → repository → model)
|
||||
2. **Domain-Driven Design**: Бизнес-модели в центре архитектуры
|
||||
3. **Dependency Injection**: Внедрение зависимостей через конструкторы
|
||||
4. **REST API**: Стандартные RESTful endpoints
|
||||
5. **JWT аутентификация**: Stateless авторизация
|
||||
|
||||
## Основные сущности
|
||||
|
||||
### Пользователь (User)
|
||||
- **Основные поля**: ID, email, имя, фамилия, аватар, телефон
|
||||
- **Дополнительно**: опыт, цели, подписка на рассылку
|
||||
- **Роли**: user, admin
|
||||
- **Аутентификация**: email + password, JWT токены
|
||||
|
||||
### Тренировка (Workout)
|
||||
- **Типы**: easy, tempo, interval, long, recovery
|
||||
- **Метрики**: дистанция, продолжительность, темп, калории
|
||||
- **Дополнительно**: заметки, дата тренировки
|
||||
|
||||
### Событие (Event)
|
||||
- **Типы**: race (забег), training (тренировка), social (встреча), workshop (семинар)
|
||||
- **Характеристики**: дата, место, дистанция, количество участников
|
||||
- **Регистрация**: открытая/закрытая, с ограничениями
|
||||
|
||||
### Достижения (Achievement)
|
||||
- **Типы**: distance (дистанция), speed (скорость), consistency (последовательность), event (событие), special (особые)
|
||||
- **Подтверждение**: верифицированные/неверифицированные
|
||||
- **Бейджи**: изображения достижений
|
||||
|
||||
### Личные рекорды (Personal Best)
|
||||
- **Дистанции**: 5к, 10к, полумарафон, марафон, другие
|
||||
- **Данные**: время, темп, дата, место проведения
|
||||
- **Подтверждение**: верифицированные результаты
|
||||
|
||||
### Новости (News)
|
||||
- **Категории**: events, training, achievements, community
|
||||
- **Контент**: заголовок, краткое описание, полный текст, изображение
|
||||
- **Взаимодействие**: просмотры, комментарии
|
||||
|
||||
### Отзывы (Review)
|
||||
- **Оценка**: 1-5 звезд
|
||||
- **Дополнительно**: достижения, дистанции, улучшения
|
||||
- **Верификация**: подтвержденные отзывы
|
||||
|
||||
### Галерея (Gallery)
|
||||
- **Категории**: training, events, community, achievements
|
||||
- **Контент**: фотографии с описанием
|
||||
- **Взаимодействие**: просмотры, лайки
|
||||
|
||||
### Тренировочные планы (Training Plan)
|
||||
- **Структура**: недельные планы с тренировками
|
||||
- **Прогресс**: текущая неделя, завершенные тренировки
|
||||
- **Цели**: целевая дата и дистанция
|
||||
|
||||
## Маршруты API
|
||||
|
||||
### Группы маршрутов
|
||||
|
||||
#### 1. Аутентификация и пользователи
|
||||
```
|
||||
POST /v1/auth/register # Регистрация
|
||||
POST /v1/auth/login # Вход
|
||||
POST /v1/auth/logout # Выход
|
||||
GET /v1/user/profile # Профиль пользователя
|
||||
POST /v1/user/editProfile # Обновление профиля
|
||||
```
|
||||
|
||||
#### 2. Тренировки
|
||||
```
|
||||
POST /v1/user/workouts # Создание тренировки
|
||||
GET /v1/user/workouts # Получение тренировок
|
||||
GET /v1/user/workouts/stats # Статистика тренировок
|
||||
PUT /v1/user/workouts/{id} # Обновление тренировки
|
||||
DELETE /v1/user/workouts/{id} # Удаление тренировки
|
||||
```
|
||||
|
||||
#### 3. События
|
||||
```
|
||||
GET /v1/events # Все события
|
||||
GET /v1/events/upcoming # Предстоящие события
|
||||
POST /v1/events/register # Регистрация на событие
|
||||
GET /v1/events/my/registrations # Мои регистрации
|
||||
```
|
||||
|
||||
#### 4. Достижения
|
||||
```
|
||||
POST /v1/user/achievements # Создание достижения
|
||||
GET /v1/user/achievements # Мои достижения
|
||||
GET /v1/achievements/user/{id} # Достижения пользователя (публичные)
|
||||
PUT /v1/user/achievements/{id} # Обновление достижения
|
||||
```
|
||||
|
||||
#### 5. Личные рекорды
|
||||
```
|
||||
POST /v1/user/personal-bests # Создание рекорда
|
||||
GET /v1/user/personal-bests # Мои рекорды
|
||||
GET /v1/user/personal-bests/summary # Сводка рекордов
|
||||
PUT /v1/user/personal-bests/{id} # Обновление рекорда
|
||||
```
|
||||
|
||||
#### 6. Новости
|
||||
```
|
||||
GET /v1/news # Все новости
|
||||
GET /v1/news/{id} # Конкретная новость
|
||||
POST /v1/news # Создание новости (админ)
|
||||
POST /v1/news/{id}/comments # Комментарий к новости
|
||||
```
|
||||
|
||||
#### 7. Отзывы
|
||||
```
|
||||
GET /v1/reviews # Все отзывы
|
||||
GET /v1/reviews/stats # Статистика отзывов
|
||||
POST /v1/reviews # Создание отзыва
|
||||
GET /v1/reviews/my # Мои отзывы
|
||||
```
|
||||
|
||||
#### 8. Верификация email и сброс пароля
|
||||
```
|
||||
GET /v1/verify-email # Верификация email
|
||||
POST /v1/auth/verify-email/resend # Повторная отправка
|
||||
POST /v1/auth/password-reset/request # Запрос сброса
|
||||
POST /v1/auth/password-reset/confirm # Подтверждение сброса
|
||||
```
|
||||
|
||||
## Аутентификация и авторизация
|
||||
|
||||
### JWT Токены
|
||||
- **Access Token**: краткосрочный (15-60 минут)
|
||||
- **Refresh Token**: долгосрочный (7-30 дней)
|
||||
- **Хранение**: HTTP-only cookies или заголовок Authorization
|
||||
|
||||
### Middleware
|
||||
1. **AuthMiddleware**: проверка JWT токена
|
||||
2. **RequireAuth**: требование аутентификации
|
||||
3. **AdminMiddleware**: проверка прав администратора
|
||||
|
||||
## Безопасность
|
||||
|
||||
### Меры защиты
|
||||
1. **Хеширование паролей**: bcrypt
|
||||
2. **SQL инъекции**: защита через GORM
|
||||
3. **CORS**: настройка политик
|
||||
4. **Валидация**: входных данных
|
||||
5. **Лимиты запросов**: предотвращение DDoS
|
||||
|
||||
### Безопасность данных
|
||||
- Чувствительные данные не возвращаются в ответах
|
||||
- Пароли никогда не логируются
|
||||
- Сессии через JWT (stateless)
|
||||
|
||||
## Конфигурация
|
||||
|
||||
### Переменные окружения
|
||||
```
|
||||
DB_HOST=localhost
|
||||
DB_PORT=5432
|
||||
DB_USER=postgres
|
||||
DB_PASSWORD=secret
|
||||
DB_NAME=api_bb
|
||||
JWT_SECRET=your-secret-key
|
||||
EMAIL_HOST=smtp.gmail.com
|
||||
EMAIL_PORT=587
|
||||
EMAIL_USER=your-email@gmail.com
|
||||
EMAIL_PASSWORD=your-password
|
||||
```
|
||||
|
||||
### Конфигурационный файл
|
||||
```go
|
||||
type Config struct {
|
||||
DBHost string
|
||||
DBPort string
|
||||
DBUser string
|
||||
DBPassword string
|
||||
DBName string
|
||||
JWTSecret string
|
||||
Email EmailConfig
|
||||
}
|
||||
```
|
||||
|
||||
## Развертывание
|
||||
|
||||
### Требования
|
||||
1. Go 1.25+
|
||||
2. PostgreSQL 12+
|
||||
3. SMTP сервер для email
|
||||
|
||||
### Шаги развертывания
|
||||
```bash
|
||||
# Клонирование репозитория
|
||||
git clone <repository-url>
|
||||
cd api_bb
|
||||
|
||||
# Установка зависимостей
|
||||
go mod download
|
||||
|
||||
# Настройка переменных окружения
|
||||
cp .env.example .env
|
||||
# редактирование .env
|
||||
|
||||
# Запуск миграций
|
||||
go run cmd/server/main.go migrate
|
||||
|
||||
# Запуск сервера
|
||||
go run cmd/server/main.go serve
|
||||
|
||||
# Или сборка
|
||||
go build -o api_bb cmd/server/main.go
|
||||
./api_bb serve
|
||||
```
|
||||
|
||||
## Тестирование
|
||||
|
||||
### Типы тестов
|
||||
1. **Юнит-тесты**: тестирование отдельных функций
|
||||
2. **Интеграционные тесты**: тестирование взаимодействия с БД
|
||||
3. **E2E тесты**: тестирование API endpoints
|
||||
|
||||
### Запуск тестов
|
||||
```bash
|
||||
# Все тесты
|
||||
go test ./...
|
||||
|
||||
# С покрытием
|
||||
go test -cover ./...
|
||||
|
||||
# Конкретный пакет
|
||||
go test ./internal/handlers
|
||||
```
|
||||
|
||||
## Мониторинг и логирование
|
||||
|
||||
### Логирование
|
||||
- **Уровни**: Debug, Info, Warn, Error
|
||||
- **Форматы**: JSON (продакшн), Text (разработка)
|
||||
- **Контекст**: request ID, пользователь, время выполнения
|
||||
|
||||
### Health checks
|
||||
```
|
||||
GET /api/health # Общая проверка
|
||||
GET /api/check # Детальная проверка
|
||||
```
|
||||
|
||||
### Метрики
|
||||
- Количество запросов
|
||||
- Время ответа
|
||||
- Ошибки по типам
|
||||
- Использование ресурсов
|
||||
|
||||
## Масштабирование
|
||||
|
||||
### Горизонтальное масштабирование
|
||||
1. **Stateless архитектура**: легкое добавление инстансов
|
||||
2. **Балансировка нагрузки**: через nginx или cloud load balancer
|
||||
3. **Кэширование**: Redis для частых запросов
|
||||
|
||||
### Вертикальное масштабирование
|
||||
1. **Оптимизация запросов**: индексы в БД
|
||||
2. **Connection pooling**: настройка пулов соединений
|
||||
3. **Асинхронная обработка**: фоновые задачи
|
||||
|
||||
## Дорожная карта развития
|
||||
|
||||
### Ближайшие планы
|
||||
1. **WebSocket**: реальное время для событий
|
||||
2. **Push-уведомления**: через Firebase Cloud Messaging
|
||||
3. **Интеграция с Strava**: импорт тренировок
|
||||
4. **Социальные функции**: друзья, группы, чаты
|
||||
|
||||
### Долгосрочные цели
|
||||
1. **Мобильное приложение**: React Native
|
||||
2. **Аналитика**: расширенная статистика
|
||||
3. **Партнерская программа**: интеграция с магазинами
|
||||
4. **Интернационализация**: поддержка других языков
|
||||
|
||||
## Контакты и поддержка
|
||||
|
||||
### Команда проекта
|
||||
- **Разработка**: [Ваши контакты]
|
||||
- **Дизайн**: [Ваши контакты]
|
||||
- **Контент**: [Ваши контакты]
|
||||
|
||||
### Документация
|
||||
- **API документация**: Swagger/OpenAPI
|
||||
- **Руководство пользователя**: на сайте begushiybashkir.ru
|
||||
- **Разработчикам**: README и примеры кода
|
||||
|
||||
### Сообщество
|
||||
- **Telegram канал**: [ссылка]
|
||||
- **Группа VK**: [ссылка]
|
||||
- **Instagram**: [ссылка]
|
||||
|
||||
---
|
||||
|
||||
*Документация обновлена: декабрь 2025 года*
|
||||
*Проект находится в активной разработке. API может изменяться.*
|
||||
Reference in New Issue
Block a user