add docs for easysite REST API service api_es
8.5 KiB
Документация REST API сервиса "Travel Platform"
Общая информация
API сервиса для управления туристическими объектами (отели, санатории, достопримечательности и др.) с системой аутентификации пользователей, отзывами и фильтрацией.
Базовый URL
http://localhost:8080 (или другой хост/порт в зависимости от конфигурации)
Модели данных
Пользователь (User)
Поля:
id- уникальный идентификаторemail- электронная почта (уникальный)password_hash- хеш пароляfull_name,first_name,last_name- имя пользователяphone,city- контактная информацияorganization_*- бизнес-данные для владельцевis_active,is_verified,role- статус и права доступа
Объект (Object)
Типы объектов:
hotel- отельsanatorium- санаторийguest_house- гостевой домtour- турrestaurant- ресторанmuseum- музейlandmark- достопримечательностьevent- мероприятиеroute- маршрут
Статусы объектов:
draft- черновикmoderation- на модерацииactive- активенinactive- неактивенrejected- отклонен
Отзыв (Review)
- Оценка от 1 до 5 звезд
- Текстовый отзыв
- Связь с объектом и автором
Аутентификация и авторизация
Система токенов:
- Access Token - для доступа к защищенным ресурсам
- Refresh Token - для обновления access token
- Token Type: Bearer
- Токены передаются в заголовке
Authorization: Bearer <token>
Роли пользователей:
- user - обычный пользователь
- moderator - модератор
- admin - администратор
Эндпоинты API
1. Проверка работоспособности
GET /health
GET /check
Проверка доступности сервиса
2. Аутентификация
Регистрация пользователя
POST /auth/register
Создание нового аккаунта
Тело запроса (UserRegisterRequest):
{
"email": "user@example.com",
"password": "password123",
"full_name": "Иван Иванов",
"phone": "+79991234567",
"city": "Москва"
}
Вход в систему
POST /auth/login
Получение токенов доступа
Тело запроса (AuthRequest):
{
"email": "user@example.com",
"password": "password123"
}
Ответ (AuthResponse):
{
"access_token": "eyJhbGciOiJIUzI1NiIs...",
"refresh_token": "eyJhbGciOiJIUzI1NiIs...",
"token_type": "Bearer",
"expires_in": 3600,
"user": {
"id": 1,
"email": "user@example.com",
"full_name": "Иван Иванов"
// ... остальные поля UserResponse
}
}
Обновление токена
POST /auth/refresh
Получение нового access token по refresh token
Тело запроса (RefreshTokenRequest):
{
"refresh_token": "eyJhbGciOiJIUzI1NiIs..."
}
Выход из системы
POST /auth/logout
Инвалидация токенов
3. Профиль пользователя
Получение профиля
GET /users/profile
Требуется аутентификация
Получение данных текущего пользователя
Обновление профиля
PUT /users/profile
Требуется аутентификация
Обновление данных пользователя
4. Управление пользователями (Admin)
Список пользователей
GET /users
Требуется роль admin
Получение списка всех пользователей
Получение пользователя по ID
GET /users/{id}
Требуется роль admin
Получение данных конкретного пользователя
Фильтрация и пагинация
Для эндпоинтов списков объектов поддерживается фильтрация через ObjectFilter:
Параметры запроса:
search- текстовый поискtype- тип объекта (hotel, sanatorium и т.д.)city- городmin_price,max_price- диапазон ценmin_rating- минимальный рейтингstatus- статус объектаowner_id- ID владельцаpage- номер страницы (начинается с 1)page_size- количество элементов на странице (1-100)sort_by- поле сортировки (title, price, rating, city, created_at)sort_order- порядок сортировки (asc, desc)
Пример запроса:
GET /objects?city=Москва&min_price=1000&max_price=5000&page=1&page_size=20&sort_by=price&sort_order=asc
Формат ответа с пагинацией
Для списков возвращается PaginatedResponse:
{
"data": [...], // массив объектов
"total": 150, // общее количество
"page": 1, // текущая страница
"page_size": 20, // элементов на странице
"total_pages": 8 // всего страниц
}
Обработка ошибок
Сервис использует стандартные HTTP статусы:
200- успешный запрос201- создан новый ресурс400- ошибка валидации401- неавторизован403- доступ запрещен404- ресурс не найден500- внутренняя ошибка сервера
Следующие шаги (планируемые эндпоинты)
На основе моделей данных ожидаются следующие API:
Управление объектами:
GET /objects- список объектов с фильтрациейGET /objects/{id}- получение объектаPOST /objects- создание объекта (требуется аутентификация)PUT /objects/{id}- обновление объектаDELETE /objects/{id}- удаление объекта
Управление отзывами:
GET /objects/{id}/reviews- отзывы объектаPOST /reviews- создание отзываPUT /reviews/{id}- обновление отзываDELETE /reviews/{id}- удаление отзыва
Модерация:
GET /moderation/objects- объекты на модерацииPOST /moderation/objects/{id}/approve- утвердить объектPOST /moderation/objects/{id}/reject- отклонить объект
Отчеты и аналитика:
GET /reports/popular-objects- популярные объектыGET /reports/user-activity- активность пользователейGET /reviews/revenue- аналитика доходов
Технические детали
База данных:
- Используется GORM (Go ORM)
- Поддерживаются миграции
- Soft delete для основных сущностей
Логирование:
- Структурированное логирование через Zap
- Логирование маршрутов при запуске
- Middleware для логирования запросов
Конфигурация:
- Централизованная конфигурация через
config.Config - Поддержка разных окружений
Middleware:
- Аутентификация (
AuthMiddleware) - Авторизация по ролям (
AdminMiddleware) - Логирование
- Recovery от паник